Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php][mysql] zmiana liczby porządkowej rekordu
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 taki problem:
chcę zmieniać liczbę porządkową rekordu za pomocą skryptu php w trakcie uaktualniania danych w bazie.

wyglądać ma to tak:

1. stan początkowy:

position | rekord
-------------------
1 | rekord1
2 | rekord2
3 | rekord3
4 | rekord4
5 | rekord5

2. po zmianie:

position | rekord
-------------------
1 | rekord1
2 | rekord5
3 | rekord2
4 | rekord3
5 | rekord4

3. po kolejnej zmianie:

position | rekord
-------------------
1 | rekord1
2 | rekord2
3 | rekord5
4 | rekord3
5 | rekord4

  1. IF($position!=$rek[position]){
  2. mysql_query("UPDATE tabela SET position=position+1 WHERE position>=$position") OR die(mysql_error());
  3. }


powyższe rozwiązanie powoduje, że po każdym uaktualnieniu danych, czyli zmianie którejś z pozycji, te, które mają wyższą liczbę porządkową zwiększają ją o 1.
problem tkwi w tym, że jeśli po raz kolejny uaktualnię dane w tabeli, te z wyższą liczbą porządkową znowu zwiększają ją o 1.

wygląda to wtedy tak:

1. stan początkowy:

position | rekord
-------------------
1 | rekord1
2 | rekord2
3 | rekord3
4 | rekord4
5 | rekord5

2. po zmianie:

position | rekord
-------------------
1 | rekord1
2 | rekord5
3 | rekord2
4 | rekord3
5 | rekord4

3. po kolejnej zmianie:

position | rekord
-------------------
1 | rekord1
2 | rekord2
3 | rekord5
5 | rekord3
6 | rekord4

jak zastosować pętlę, żeby rekord3 miał lp 4 a rekord4 lp 5?

pozdrawiam

Ten post edytował mpps 6.02.2008, 17:52:57
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
nowotny
post
Post #2





Grupa: Zarejestrowani
Postów: 875
Pomógł: 122
Dołączył: 2.02.2008

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


Ja wymyśliłem coś takiego:
  1. <?php
  2. $position_doc='7';//pozycja docelowa gdzie chcemy umiescic rekord
  3. $rekord='trzy';//nazwa rekordu ktory chcemy przesunac
  4.  
  5. $query='SELECT * FROM tabela WHERE rekord="'.$rekord.'"';
  6. $result=mysql_query($query);
  7. $res=mysql_fetch_assoc($result);
  8. $rekord_current_position=$res['position'];
  9.  
  10. if($rekord_current_position>$position_doc) {
  11. $direction='back';
  12. $query='SELECT * FROM `tabela` WHERE `position` BETWEEN '.$position_doc.' AND '.$rekord_current_position.';';
  13. }
  14. else {
  15. $direction='forw';
  16. $query='SELECT * FROM `tabela` WHERE `position` BETWEEN '.$rekord_current_position.' AND '.$position_doc.';';
  17. }
  18.  
  19. $result=mysql_query($query);
  20. while ($row = mysql_fetch_assoc($result)) {
  21. if($row['position']==$rekord_current_position){
  22. $query='UPDATE tabela SET position="'.$position_doc.'" WHERE rekord="'.$row['rekord'].'"';
  23. }
  24. else{
  25. if($direction=='forw'){
  26. $query='UPDATE tabela SET position="'.($row['position']-1).'" WHERE rekord="'.$row['rekord'].'"';
  27. }
  28. else{
  29. $query='UPDATE tabela SET position="'.($row['position']+1).'" WHERE rekord="'.$row['rekord'].'"';
  30. }
  31. }
  32. mysql_query($query);
  33. }
  34. ?>


I mam nadzieje że nie masz pola "position" zdefiniowanego jako AUTOINCREMENT... (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Ten post edytował nowotny 6.02.2008, 22:41:36
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 25.08.2025 - 10:46