Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]while mysql_query lp
Forum PHP.pl > Forum > Przedszkole
Tadek888
Witam.
Mam taki oto problem.

Przez pętlę while wykonuję UPDATE do bazy danych na wszystkich rekordach w konkretnej tabeli.
  1. $lp = 0;
  2. $link = db_connect_BF(); $todo2 = mysql_query("SELECT ".T_FAQ_C_ID." FROM ".T_FAQ." ORDER BY ".T_FAQ_C_ORD." ASC", $link);
  3. while(list($fid) = mysql_fetch_array($todo2)){
  4. $neword = $lp++;
  5. $todo3 = mysql_query("UPDATE ".T_FAQ." SET ".T_FAQ_C_ORD." = '".$neword."' WHERE ".T_FAQ_C_ID." = '$fid'", $link);
  6. }
  7. mysql_close($link);


dlaczego $lp nie chce sie wrzucić w postaci wyliczanki 1, 2, 3 itd...
wstawia się w postaci policzonych rekordów czyli jeśli są 3 to wszędzie wpakuje 3 zamiast lecieć po kolei od 1 w górę.
mortus
W ogóle Twoje rozwiązanie jest nieoptymalne ze względu na każdorazowe wykonywanie zapytania UPDATE w pętli. Tymczasem można to zrobić nieco inaczej, wykorzystując zmienne w MySQL:
  1. // ustawmy wartość zmiennej początkowej, wartość ta jest zawsze o 1 mniejsza od wartości w pierwszym rekordzie
  2. // jeśli zatem chcemy numerować od 0, to będzie to -1, jeśli chcemy numerować od 1, to będzie to 0
  3. // w przykładzie porządkujemy rekordy rozpoczynając od 1
  4. $r1 = mysql_query("SET @i := 0", $link);
  5. $r2 = mysql_query("UPDATE " . T_FAQ . " SET " . T_FAQ_C_ORD ." = (@i := @i + 1) ORDER BY " . T_FAQ_C_ORD . " ASC", $link);


Niwelujemy w ten sposób całkowicie brak optymalności po stronie aplikacji.
Tadek888
Dziękuję serdecznie.
Odpowiedź jak najbardziej pomocna.
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.