Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Zapętlone zapytania
Forum PHP.pl > Forum > PHP
VinniV
Witam,
sprawa ma się następująco.

Posiadam system zarządzający menu. Przedstawia się on mniej więcej tak:


Teraz. Przy kasowaniu któregoś menu, jeżeli nie jest ostatnim elementem na liście z danej strony (lewa / prawa), należy zmienić wartość `pozycja`. Konkretniej mówiąc - pomniejszyć o 1, aby zachować ciągłość.

Najpierw pobieram `id` elementów, których wartość `pozycja` musi być pomniejszona o 1 - następnie dla każdego elementu wykonuję akcję pomniejszenia.
Całość skryptu wygląda tak:

  1. $sql = "SELECT `kolejnosc`,`id`, `nazwa` FROM `portal_menu` WHERE `kolejnosc` > (SELECT `kolejnosc` FROM `portal_menu` WHERE `id` = '".(int)$id."') AND `pozycja` = (SELECT `pozycja` FROM `portal_menu` WHERE `id` = '".(int)$id."')";
  2. $wyslij = mysql_query($sql);
  3. while ($wiersz = mysql_fetch_array($wyslij))
  4. {
  5. $sql2 = "UPDATE `portal_menu` SET `kolejnosc` = '".(int)($wiersz['kolejnosc'] - 1)."' WHERE `id` = '".$wiersz['id']."'";
  6. $wyslij2 = mysql_query($sql2);
  7. }


Jak nie trudno policzyć - ilość zapytań jest zależna od ilości elementów w menu. Moje pytanie brzmi: Czy można cała akcję wykonać przy mniejszej ilości zapytań?
Bardzo chętnie poczytam o jakiś wskazówkach, pomysłach. Jak pozycji menu będzie 40, to kasując 1 pozycję, wymuszam wykonanie 39 zapytań. Owszem - cała akcja będzie wykorzystywana albo nigdy, albo raz na ruski rok - jednak siedzi mi na śledzionie, że niepotrzebnie obciążam serwer zapytaniami.
Alfą i omegą php z pewnością nie jestem - dlatego z góry dziękuję za wszelkie pomysły, jak uprościć całą akcję.
wookieb
Chryste...
  1. UPDATE menu SET kolejnosc = kolejnosc - 1 WHERE kolejnosc > [numer_kolejnosc_usuwanego_elementu]
VinniV
Cytat(wookieb @ 12.10.2009, 13:07:42 ) *
Chryste...


Nie trzeba od razu tak brutalnie. Każdy kiedyś zaczynał, prawda?

Dziękuję bardzo za pomoc smile.gif Temat można zamknąć.
wookieb
Tak ale w wieeelu tutorialach i kursach ten aspekt jest omówiony smile.gif_
VinniV
Hm, przyznam szczerze, że poświęciłem czas na wyszukanie informacji o tym problemie. Być może nie znalazłem odpowiednich wskazówek, gdyż nie bardzo wiedziałem jak odpowiednio nazwać problem.

Jeszcze raz dziękuję za podpowiedź.

Zapytania zredukowane - szkoda, że update nie można wykonać na tabeli, z której jednocześnie robi się select tongue.gif no ale - chciałbym za dużo 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.