Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][mysql]Blokowanie rekordu
Forum PHP.pl > Forum > Przedszkole
alex19
Szukam jakiegos sensownego pomyslu na to zeby czasowo zablokowac rokord w bazie danych tak aby sie nie wywietlal.
Juz tlumacze o co chodzi. W bazie bedzie sie znajdowalo wiele firm i bedzie z tego korzystalo rownoczesnie kilkudziesieciu uzytkownikow. Chcialbym zrobic zeby bylo tak, ze jak jeden z uzytkownikow otworzy sobie jakas firme i bedzie cos z nia robil to nie bedzie sie ona wyswietlala juz innym uzytkownikom.
Czy jest jakies sensowniejsze rozwiazanie tego problemu poza dolozeniem do tabeli z tymi firmami dodatkowego pola 'zablokowane' i zaraz po otwarciu updateowanie tego pola na zablokowane, a po zamknieciu zmienianie spowrotem na wolne?
kossa
Możesz popróbować z transakcjami

Łukasz
phpion
Wydaje mi sie, ze wlasnie osobne pole np. stan o typie ENUM z wartosciami 0 lub 1 jest najlepszym rozwiazaniem. Przy pokazywaniu danych userow wybierasz te rekordy WHERE stan='1' a przy kazdym rozpoczeciu edycji zmieniasz stan na 0, a po zakonczeniu na 1. Problem tylko w tym, ze ktos moze zaczac edycje, nastepnie sie rozmysli i wylaczyc przegladarke. Wtedy stan nie wroci z powrotem na 1. Ale to tez mozna rozwiazac tworzoac dodatkowa kolumne np. edyja_start w ktorej bedizesz przechowywal aktualny czas rozpoczetej edycji. No i potem musialbys przelatywac skryptem cala baze zeby zmienic na stan '1' te rekordy, dla ktorych edycja_statr + (np.) 180 (sekund) < aktualny czas czyli te, ktore sa edytowane dluzej niz 3 minuty (przykladowo).
dr_bonzo
No to prosciej dac jedna kolumne z: edit_start_time i gdy jest NULL lub za stara to mozna edytowac, i przy edycji wstawia obecny czas. Po zakonczeniu edycji ustawia ja na NULL. Gdy nie zakonczysz prawidlowo edycji -- zestarzeje sie i bedzie mozna ja edytowac.
alex19
Czyli myslalem dobrze. Podoba mi sie pomysl z czasem, ale nie jest do konca dobry bo to mi dolozy dodatkowy waarunek do wiekszosci zapytan do bazy, ale jeszcze to rozwazam i zadecyduje o tym odpowiedz na kluczowe pytanie: czy moge do tego uzyc timestamp'a questionmark.gif Ze moge uzyc to wiem napewno, ale czy to bedzie "dzialac" np po kilku dniach czy tylko w obrebie jednego dnia?

Pomysl z zaznaczaniem 0,1 jest najlepszy, bo zalatwi mi jeszcze jedne problem odrazu gdyz czesc rekordow bedzie niewidoczna dla nikogo na dziendobry po dodaniu do bazy poniewaz bdea musialy przechodzic najpierw autoryzacje i wtedy po autoryzacji byly by widoczne. Niestety niezmienienie statusu widocznosci bedzie niedobre, bo w ten sposob pojawi sie znowu w autoryzacji. Czy da sie jakos wymusic automatyczne zmienienie pola na 1? Zakladam ze uzytkownik jak sie rozmysli to nie zamknie przegladarki, ale poprostu zmieni strone. Czy mozna ustawic jakos zeby wykonywal sie skrypt po opuszczeniu strony(przechodzeniu u inna) ?
phpion
Wlasnie wydaje mi sie ze najlepiej uzyc unixowego formatu daty - ja tak robie smile.gif potem mozesz ofmratowac wyjscie dowolnie, zabawa czasem to pikus (zwykle liczby calkowite).
Co do 0,1. Wcale nie musisz sie ograniczac do tych 2 wartosci. Np:
0 - nowy wpis dodany i czekajcy na aktywacje
1 - wpis aktywowany i widoczny
2 - wpis edytowany i niewidoczny
i w zapytaniu SQL wybierasz tylko takie, gdzie stan='1' smile.gif
alex19
Cytat(phpion.com @ 15.08.2006, 22:04 ) *
Wlasnie wydaje mi sie ze najlepiej uzyc unixowego formatu daty - ja tak robie smile.gif potem mozesz ofmratowac wyjscie dowolnie, zabawa czasem to pikus (zwykle liczby calkowite).

Hmmm czyli timestamp to unixowa rofma daty i czasu?
A jak mozna z tego wyciagnac date i godzine? Zerknalem na szybko do manuala php i nie zabardzo tam to widze dry.gif
Cytat
Co do 0,1. Wcale nie musisz sie ograniczac do tych 2 wartosci. Np:
0 - nowy wpis dodany i czekajcy na aktywacje
1 - wpis aktywowany i widoczny
2 - wpis edytowany i niewidoczny
i w zapytaniu SQL wybierasz tylko takie, gdzie stan='1' smile.gif

No wlasnie nie wiem czemu o tym nie pomyslalem wczesniej. Napewno zastosuje to do czegos innego, bo bez sensu zrobilem 2 kolumnu w tabeli.

Pomyslalem sobie ze moglbym tez zrobic sobie dodatkowa tabele gdzie bedzie timestamp oraz id zablokowanego rekordu. Wtedy odczytujac rekordy sprawdzac czy nie ma go na "czarnej liscie" i jak nie ma to wyswietlac.
Pojawiaja sie jednak 2 opcje: skrypt uruchamiany za kazdya proba przejzenia danych i czyszczacy czarna liste(jak minal juz czas blokady), albo odpalany raz dziennie skrypt czyszczacy cala tabele(rekordy moga byc chyba blokowane nawet na caly dzien).

Do drugiej opcji jedt pytanie dodatkowe: czy da sie jakos z poziomu strony uruchamiac jakos skrypt tylko i wylacznie raz dziennie?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.