Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MySQL] Aktualizacja wszystkich rekordów w kolumnie
gausek90
post 24.04.2014, 19:26:30
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 24.04.2014

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


Cześć wszystkim,

mam tabelę w bazie danych (przykładowa):

ID, Name, Order, Visible:
1, pierwszy, 1, 1
3, drugi, 4, 1
4, trzeci, 2, 1
7, czwarty, 8, 1
27, piąty, null, 0

Funkcjonalność polega na tym, że na stronie wyświetlane są informacje z rekordów w kolejności według kolumny "Order" od 1 do +~ jeżeli w kolumnie Visible jest wartość 1.

Jednak, w niektórych przypadkach np. usunięcia rekordu ze środka tabeli, powstaje luka (tak jak w przykładowej bazie) gdzie prawidłowa kolumna "Order" powinna zawierać wszystkie liczby od 1 do ~ czyli 1, 2, 3, 4, 5, itd., a nie 1, 3, 4, 8 itd. (brakuje 2, 5, 6, 7). Dodatkowa sprawa, że niektóre rekordy w kolumnie Order nie mają wartości (wartość null), ponieważ nie są widoczne na stronie.

Potrzebuje stworzyć zapytanie do bazy, które np. w przypadku usunięcia rekordu ze środka tabeli, zaktualizuje wartości w kolumnie Order od 1 do +~ dla wszystkich rekordów, które w kolumnie Order nie mają wartości null, i w obecnej kolejności według kolumny Order.

Próbowałem napisać takie zapytanie (nawet na razie pominąłem fakt, żeby ominąć rekordy z wartością null w kolumnie Order, i w kolejności według order) lecz nawet to nie udaje mi się.

Byłbym bardzo wdzięczny za pomoc.

EDIT. Ta funkcjonalność ma zastosowanie w systemie CMS, który sam piszę, dla ustawiania widoczności i kolejności wyświetlania podstron (zmiana kolejności podstron odbywa się poprzez zapytanie, które aktualizuje kolumnę Order o 1 w górę lub 1 w dół, (w zależności od kierunku) oba rekordy, które zapytanie dotyczy)

Ten post edytował gausek90 24.04.2014, 19:31:57
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
Greg0
post 24.04.2014, 19:53:53
Post #2





Grupa: Zarejestrowani
Postów: 264
Pomógł: 54
Dołączył: 31.08.2007
Skąd: Tychy

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


Gdy usuwasz element z pozycją np. 3. To w następnym zapytaniu aktualizujesz wszystkie rekordy z pozycją >3, odejmując od pola order jedynkę.
W skrócie
  1. DELETE FROM test WHERE `order`=3;
  2. UPDATE test SET `order`=`order`-1 WHERE `order`>3;
Go to the top of the page
+Quote Post
Wazniak96
post 24.04.2014, 19:56:16
Post #3





Grupa: Zarejestrowani
Postów: 550
Pomógł: 75
Dołączył: 5.06.2012
Skąd: Lębork

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


piszę od ręki i nie wiem czy zadziała. smile.gif

  1. $order = 5; //ostatnio skasowany rekord z wartością order = 5
  2. $sql = "UPDATE table SET order = order-'1' WHERE order > '$order'";
Go to the top of the page
+Quote Post
nospor
post 25.04.2014, 08:48:45
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
piszę od ręki i nie wiem czy zadziała.
Nie zadziala.... order to nazwa zastrzezona i trzeba koniecznie brac ją `` gdy ktos mial fantazje i tak nazwal kolumne
Poza tym 1 to liczba a nie tekst wiec pisze sie 1 a nie '1'

@gausek90 wydaje mi się, iż poszedles troche w zlym kierunku. Powstanie luki nie powinno mieć zadnego znaczenia dla mechanizmu sortowania.
Rozumiem, ze masz blad dlatego, ze podczas zmiany miejsc zawsze przesuwasz o 1. I tu wydaje mi sie masz blad. Podczas zmiany miejsc powinienies zmieniac miejscami dwa sąsiadujace ze sobą elementy i nie zakladac na sztywno, ze roznica kolejnosci miedzy nimi wynosi 1. To tutaj powinienies poprawc mechanizm i nie zawracac sobie glowy lukami


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
gausek90
post 25.04.2014, 12:55:03
Post #5





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 24.04.2014

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


Dzięki wam za pomoc. Udało mi się napisać działający skrypt smile.gif

Pozdrawiam serdecznie
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 Wersja Lo-Fi Aktualny czas: 14.08.2025 - 06:13