Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Kilka procesow SQL jednoczesnie... problem - kolejka!!!
Forum PHP.pl > Forum > PHP
bgargas
Witam.
Zabralem sie za dosc duzy projekt i jak dotychczas - bedac prawie na ukonczeniu - zazyla 8O mnie jedna sprawa.
Przedstawie w skrucie dzialanie skryptu.
Skrypt to tzw. 'Workbook'. Klient dzwoni - pracownik umawia go na robote i wpisuje do bazy poprzez formularz php w czasie rozmowy lub zaraz po niej.
I tu problem - chce zablokowac mozliwosc wpisania 2 rekordow w tym samym czasie - gdy jedna osoba jest w trakcie pisania (nie musi jeszcze wykonywac sie proces w sql - bo to przeciez sa najwyzej sekundy), ale jezeli juz wejdzie na strone z formularzem - inna osoba dostaje komunikat (chcac cos wdytowac) ,ze jest w kolejce...
Mam nadzieje, ze dobrze to wyjasnilem. Myslalem o tym, zeby zrobic to od strony MySqla - mianowicie zablokowac max procesow do 1, ale to sie wiaze z tym co opisalem powyzej - ciezko trafic na aktywny tym bardziej chcac, zeby 2 osoba zauwazyla co zostalo przed chwila wpisane.
Licze na pomoc. Wielkie dzieki. smile.gif
s_w_ir
Ja bym to pokombinował z flock();
Chodzi mi o to że by formularz był w oddzielnym pliku i teraz kiedy ktoś wpisuje to zlecenie to plik ma włączony flock(), a kiedy już naciśnie wyślij i przeniesie się na następną stronę to wyłancza blokade.
Ale lepiej sprawdź w manualu to co wymodziłem bo wygląda na dość niepewne rozwiązanie zwłaszcza pod win98.
bgargas
Cytat
Ja bym to pokombinował z flock();

Hmmm. Nie bardzo pasuje mi takie rozwiazanie. Wsystkie dane ida prosto do SQL, mo co kolejkowac je do pliku? Mozna wyprobowac, ale nie o to mi chodzilo.. sad.gif
Ma ktos jakis pomysl ciekawszy.
s_w_ir - dzieki za checi.

Pozdrawiam
s_w_ir
Cytat
s_w_ir - dzieki za checi.

No spoko nie ma sprawy, po prostu nic innego narazie nie przyszło mi do głowy, a pamiętam że takie rozwiązanie dał koleś w liczniku tekstowym, żeby dwie osoby naraz nie mogły otworzyć tego samego pliku a przez to "przypadkowo" nie skopać w nim czegoś(np. nie skasować wartości w nim zapisanej). Dobra mniejsza o to jeszcze coś pokminie.
s_w_ir
Mam lepszy pomysł opartry na tym co wcześniej, ale z wykorzystaniem bazy...
No to robisz sobie jedną tabele która będzie miała jeden wpis.
I tak jeżeli ktoś otwiera skrypt ankiety to robisz update wpisu na dajmy na to "close" gdy ktoś kończy lub rezygnuje z wpisu robisz znowu update tym razem na "open"(albo to samo tylko że z flagą).
No i chyba wiadomo że jeśli kolo wchodzi a w bazie mamy close to wyświetli mu się "poczekaj jesteś w kolejce".
Wydaje mi sie to o wiele wydajniejsze, od tamtego pomysłu.
Pozdro.
bgargas
Nono.To juz brzmi lepiej - nawet o tym myslalem, ale zastanawialem sie czy rozwiaze to sprawe multi-userow.Ale przeciez wszyscy korzystaja z tego samego wiec nie bedzie problemu.Siade za chwile i napisze, zobaczymy jak bedzie funkcjonowalo...
Caly czas prosze o jakies "sprawdzone" pomysly - moze ktos pisal cos takiego i jest w stanie podpowiedzies swoj - wlasnie sprawdzony sposob.Dochodzi tu jeszcze sprawa, zeby zaraz po wpisaniu przytrzymac jeszcze 20 sekunf zanim odblokujemy flage.Ale to juz chyba sprawa w sql TIME(), he ?
Pozdrawiam.
BTW: caly czas mecze sprawe automatycznego odswiezenia gdy ktos naciska BACK w przegladarce.Wystarczy zwykle polecenie html "content refresh"? OK.
Wielkie dzieki. Podpowiadajcie !
scanner
Pytanie w kwestii logiczne: Dlaczego dwie osoby nie maja miec prawa do rownoczesnej pracy? W takim przypadku lepszym wydawalby sie notes (papierowy) przekazywany z rąk do rąk.
bgargas
Cytat
Pytanie w kwestii logiczne: Dlaczego dwie osoby nie maja miec prawa do rownoczesnej pracy?


Postaram Ci sie to jakos zrozumiale przedstawic. Co do zeszytu - to wlasnie zamieniam ten standardowy kartkowy na ten smile.gif Chodzi o to, ze firma przyjmuje zlecenia na roboty u danych osow (w tym przypadku chodzi o sanding i wykonczenie podlog). NIE jest dopuszczalne, aby 2 gosci z obslugi customera jednoczesnie umawialo go na robote w dany dzien - a co bedzie gdy ustala taka sama godzine czy uzyja podwojnego wpisu na dany dzien, gdzie zostala tylko 1 wolna robota - no wiec bedzie o jedna za duzo ? :cry: He ? Moze przychodzi Ci cos do gloey jak rozwiazac ten problem - bardzo wazne. Mimo wszystko biore sie teraz i sprobuje na fladze ustawianej w bazie to rozwiazac. Pozdrawiam ! Pomocy !
uboottd
Blokowanie mozliwosci pracy moze okazac sie z czasem troche niewygodnawe . Zrob moze tak: w momencie rozpoczecia pracy wpisuj do bazy rezerwacje danego terminu o ile jest wolny i nie zarezerwowany przez kogos innego, potem wypelniasz formularz i po zakonczniu wypwlniania uzupelniasz ten wiersz danymi w formularza lub kasujesz ten wiersz jak klient nagle zrezygnowal. Z kolei wada tego moze sie okazac fat robienia dziur w terminach. Innym pomyslem moze byc najpierw pobranie danych bez okreslonego terminu, i dopiero po tym przydzielenie terminu.
bgargas
OK ! Wielkie dzieki za podpowiedzi. Po zlozeniu tego co mi napisaliscie i swoim przemysleniom - opracowalem niezawodny sposob (i hope so smile.gif
Mniej wiecej cos takiego (prosto ale skutecznie)
[php:1:0bf2df9e76]<?php
$sql = mysql_query("SELECT * FROM wb_edited WHERE locked='1'");
$locked_check = mysql_num_rows($sql);
if($locked_check == 0) {

$sql1 = mysql_query("SELECT * FROM wb_edited WHERE data='$data' AND isEdited='0'");
$data_check = mysql_num_rows($sql1);
if($data_check == 0) {
mysql_query("UPDATE wb_edited SET data='$data', isEdited='1'");
mysql_query("UPDATE wb_edited SET locked='1'");
}
}
else {
print "BUSY";
die;
}
?>[/php:1:0bf2df9e76]


Pozdrawiam i dzieki smile.gif
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.