Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [mysql][php] update wielu rekordów z wypełnieniem serią, coś na zasadzie auto_increment
mpps
post
Post #1





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 14.03.2003
Skąd: Szczecin

Ostrzeżenie: (0%)
-----


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


--------------------
www.mpps.pl
park maszynowy: apache 2.2.22 | php 5.4.0 | MySQL 5.0.10 | phpMyAdmin 3.5.0 | notepad ++ | pilsner urquell
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
abc667
post
Post #2





Grupa: Zarejestrowani
Postów: 229
Pomógł: 0
Dołączył: 29.05.2007

Ostrzeżenie: (0%)
-----


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

jedno zapytanie bez żadnej pętli, myślę że o to ci chodzi?
Go to the top of the page
+Quote Post
uli
post
Post #3





Grupa: Zarejestrowani
Postów: 318
Pomógł: 6
Dołączył: 27.01.2005

Ostrzeżenie: (0%)
-----


Na pewno bez apostrofów jeśli już...


--------------------
Prawo Wylera:
Nie ma rzeczy niemożliwych dla kogoś, kto nie musi ich zrobić sam.
Go to the top of the page
+Quote Post
abc667
post
Post #4





Grupa: Zarejestrowani
Postów: 229
Pomógł: 0
Dołączył: 29.05.2007

Ostrzeżenie: (0%)
-----


racja, skopiowałem z jego posta i nie zauważyłem
Go to the top of the page
+Quote Post
mpps
post
Post #5





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 14.03.2003
Skąd: Szczecin

Ostrzeżenie: (0%)
-----


@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

Ten post edytował mpps 26.06.2007, 14:29:51


--------------------
www.mpps.pl
park maszynowy: apache 2.2.22 | php 5.4.0 | MySQL 5.0.10 | phpMyAdmin 3.5.0 | notepad ++ | pilsner urquell
Go to the top of the page
+Quote Post
Kicok
post
Post #6





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

Ostrzeżenie: (0%)
-----


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.


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
mpps
post
Post #7





Grupa: Zarejestrowani
Postów: 242
Pomógł: 0
Dołączył: 14.03.2003
Skąd: Szczecin

Ostrzeżenie: (0%)
-----


tak @Kicok, wygląda na to, że masz rację.
dzięki za odp


--------------------
www.mpps.pl
park maszynowy: apache 2.2.22 | php 5.4.0 | MySQL 5.0.10 | phpMyAdmin 3.5.0 | notepad ++ | pilsner urquell
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 16:03