Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php/mysql] Zmiana pozycji rekordu
Forum PHP.pl > Forum > PHP
Luke_Star
Jak w temacie winksmiley.jpg Rozchodzi sie o najbardziej optymalny mało kombinownay sposób na zmiane pozycji np. Kategorii w bazie danych. Chodzi oczywiście o zmiane pozycji w góre lub w dół.
ayeo
W relacyjnych bazach danych pozycja nie ma znaczenia! Jak chcesz to sobie daj dodatkową kolumnę position i tam wpisuj pozycję, jak pobierasz dane to sortuj według tej kolumny... bo pewnie o to Ci chodzi z tymi pozycjami.
Luke_Star
ayeo własnie o to mi chodzi, jak zaimplementowac ta zmiane pozycji! dodam ta kolumne i co z tego? mam powiedzmy 15 kategorii i chce 12 dac o 1 w gore, czyli musialbym zmieniac wartosc pozycji pola 11 i 12. Chodzi mi o to jak zrobic to w sposob najbardziej przejrzysty i optymalny
ayeo
Nie napiszę Ci kodu bo nie wiem jak wygląda Twoja baza danych. Musisz poprostu zrobić sobie funkcję, która jako parametr pobiera nazwę kategorii. Funkcja odpytuje baze o pozycję (lub id) tej kategorii, i następnie updatujesz position na position-1, wcześniej pobierasz też kategorię o position o 1 mniejszą niż tamtejk kategorii i zamieniasz na position (o 1 większą niż była) w sensie zamienisz miejscami jakąś kategorię z tą o wyższej pozycji. Oczywiście taka funkcja przesuwa do góry.... Korzystając z rekurencji ta sama funkcja może przesuwać o ile pozycji chcesz, oczywiście nie będzie to wydajne rozwiązanie.

PS jeśli position musi być unikalne to na czas zamiany ustaw je na powiedzmy 0, żeby się niepowtarzały zanim nie updatujesz obu wierszy winksmiley.jpg
Luke_Star
ayeo ten sposób znam wrecz opisłame go posta wyżej, chodziło mi o to czy ktoś odnalazł bardziej optymalne i estetyczne rozwiązanie winksmiley.jpg No nic musi mi chyba wystarczyc to co mam
ayeo
Jeśli masz 15 kategorii to sobie odpal PHPMYADMIN i sobie pozmieniaj ręcznie tongue.gif
Luke_Star
bardzo śmieszne winksmiley.jpg
Nattfarinn
Zamiast pakować to w pętlę czy rekurencję dla przesunięć o większą ilość pozycji już lepiej podać na którą pozycję ma być przesuniecie, zmienić w bazie pole odpowiedzialne za pozycję wszystkim wartościom (większym lub równym ale mniejszym niż przesuwana pozycja - dla przesunięcia w górę, analogicznie w dół) na +1 (lub -1 dla przesunięć w dół), a następnie przypisać przesuwanemu wierszowi wartość pola na które chcesz przesunąć.

Dla przykładu:
Kod
1. Sałata
2. Kapusta
3. Marchew
4. Kalafior
5. Ogórek

Przesunięcie Kalafior na pozycję numer 2 to: inkrementacja pól dla Kapusty i Marchwii a następnie przypisanie Kalafiorowi pozycji 2.

Efekt finalny:
Kod
1. Sałata
2. Kalafior
3. Kapusta
4. Marchew
5. Ogórek


PS. Wybaczcie to łopatologiczne porównanie do warzyw, ale mam właśnie dobry humor biggrin.gif
ayeo
Cytat
PS. Wybaczcie to łopatologiczne porównanie do warzyw, ale mam właśnie dobry humor biggrin.gif


Nie martw się, przejdzie Ci tongue.gif
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.