Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mysql][php] update wielu rekordów z wypełnieniem serią
Forum PHP.pl > Forum > Przedszkole
mpps
witam,
mam taką sytuację:
  1. id | link | position
  2. -----------------------
  3. 1 | link1 | 1
  4. 2 | link2 | 3
  5. 3 | link3 | 5
  6. 4 | link4 | 4
  7. 5 | link5 | 6
  8. 6 | link6 | 2

i kod:
  1. <?php
  2. $tot_posq = mysql_query("SELECT * FROM links WHERE position >= '$position'");
  3. $tot_cols = mysql_num_rows($tot_posq);
  4. while($rek = mysql_fetch_array($tot_posq)){
  5. if($i < $tot_cols){
  6. mysql_query("UPDATE links SET position = $position + $i WHERE position >= '$position'") or die(mysql_error());
  7. $i++;
  8. }
  9. }
  10. ?>


powyższy kod zwraca błąd:
  1. 'You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE position>='3'' at line 1'

a ja już nie wiem, jak mam zmodyfikować pętlę, żeby wykonywała poniższe:
potrzebuję zmienić pozycję któregoś z wpisów w bazie i chę, aby wszystkie pozostałe pozycje, które mają wyższą lub równą pozycję co zmieniana, ziększały swoją pozycję o 1, które będzie dodawane do zmiennej $position.
czyli coś na zasadzie auto_increment z tym, że nie pomija wykorzystanych już id rekordów.

pozdrawiam
marcin
abc667
  1. UPDATE links SET position = position + 1 WHERE position >= '$position'

jedno zapytanie bez żadnej pętli, myślę że o to ci chodzi?
uli
Na pewno bez apostrofów jeśli już...
abc667
racja, skopiowałem z jego posta i nie zauważyłem
mpps
@uli
apostrofy nie są problemem.

@phpion.com
jak pod zmienną $i podstawię jakąś liczbę, to wszystko zmienia na tą liczbę, więc to chyba nie jest powodem...(?)

@abc667
ja wiem, że to bez pętli można zrobić ale nie da to wyniku, który oczekuję.
opiszę to obrazowo:

mam cztery wpisy (zwróćcie uwagę na position):
id | link | position
--------------------
1 | link1 | 1
2 | link2 | 3
3 | link3 | 5
4 | link4 | 7

i chcę je zamienić tak, aby np. link3 otrzymał pozycję 2 a jednocześnie pozostałe otrzymały kolejne pozycje (z zachowaniem kolejności, w jakiej były, poza link3), czyli:
id | link | position
--------------------
1 | link1 | 1
2 | link2 | 3
3 | link3 | 2
4 | link4 | 4
Kicok
Tak tego na pewno nie zrobisz. Zauważ, że pierwsze wykonanie zapytania UPDATE (pierwsza iteracja pętli) zamieni ci wszystkie wiersze, których position jest większe od $position. Kolejna iteracja znów zamieni ci wszystkie wiersze. Itd. Itd.
mpps
tak @Kicok, wygląda na to, że masz rację.
dzięki za odp
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.