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
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 |
|
|
|
![]() |
| -Wieviór- |
Post
#2
|
|
Goście |
Ogólnie wygląda to dobrze chyba, tylko trzeba pamiętać, że w pierwszym if'ie else oznacza =<, a więc też gdy są sobie równe, i choć nic to nie zmieni, to warto dodać elseif < i elseif =, bo nie trzeba wtedy robić zapytania do bazy. Inna sprawa, że proponuję lekką optymalizacje:
Nie potrzebne używać * i tworzyć tablicę, wyczytując całą tabelę z bazy danych, jeśli używamy tylko position ;] |
|
|
|
Post
#3
|
|
|
Grupa: Zarejestrowani Postów: 242 Pomógł: 0 Dołączył: 14.03.2003 Skąd: Szczecin Ostrzeżenie: (0%)
|
I mam nadzieje że nie masz pola "position" zdefiniowanego jako AUTOINCREMENT... (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) no, jak bym używał do 'position', to nie potrzebowałbym takiego rozwiązania - za które bardzo Ci dziękuję, bo po lekkich modyfikacjach działa doskonale! Modyfikacje nie wpływają na funkcjonalność, dlatego nie będę zaśmiecał nimi tutaj miejsca. jeszcze raz wielkie dzięki!! jeśli komuś (może mi?) będzie się chciało, to może na podstawie Twojego rozwiązania rozwinąć temat i stworzyć np. skrypt do numerowania 'na nowo' danych w bazie. spotkałem się na tym forum wielokrotnie z pytaniem o możliwość optymalizacji bazy pod kątem nadania nowego 'id' w sytuacji, kiedy używa się 'auto_increment' i wiadomo, że po wyrzuceniu jakiegoś rekordu powstają 'dziury'. wiem, wiem, że zmiana 'id' może powodować błędy, itd, bla, bla, ale są takie sytuacje, kiedy taka zmiana jest pożądana! Inna sprawa, że proponuję lekką optymalizacje: Nie potrzebne używać * i tworzyć tablicę, wyczytując całą tabelę z bazy danych, jeśli używamy tylko position ;] a nie prawda! jak zassiesz z bazy tylko 'position', to jest problem, ponieważ nie zostanie zmieniona pozycja elementu, który już taką pozycję ma (pole nie jest 'primary', bo być nie może)! czyli, jeśli zmienisz 9->6, to 6->6 a nie 6->7 jeszcze nie wiem czemu ale właśnie to sprawdzam od siebie dodaję zmianę w sytuacji usuwania rekordu:
proste ale jeśli ktoś będzie potrzebował, to ma komplet pozdrawiam i dzięki! Ten post edytował mpps 7.02.2008, 15:36:01 |
|
|
|
mpps [php][mysql] zmiana liczby porządkowej rekordu 6.02.2008, 17:51:50
Wieviór Generalnie chcesz osiągnąć to, że podnosić powiedz... 6.02.2008, 18:12:49
mpps nie,
chodzi o to, żeby po każdej zmianie pozycji r... 6.02.2008, 18:40:31
nowotny Ja wymyśliłem coś takiego:
[PHP] pobierz, plainte... 6.02.2008, 22:40:21
Wieviór Słusznie, nie zauważyłem, że tam się jeszcze pole ... 7.02.2008, 15:32:11 ![]() ![]() |
|
Aktualny czas: 26.12.2025 - 10:51 |