Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php/mysql] Zmiana pozycji rekordu, czyli jak ustawiac rekord o jedne w góre lub o jedne w dól
Luke_Star
post
Post #1





Grupa: Zarejestrowani
Postów: 129
Pomógł: 2
Dołączył: 17.01.2005

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


Jak w temacie (IMG:http://forum.php.pl/style_emoticons/default/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ół.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
ayeo
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 202
Pomógł: 117
Dołączył: 13.04.2007
Skąd: 127.0.0.1

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


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.

Ten post edytował ayeo 16.12.2007, 18:22:54
Go to the top of the page
+Quote Post
Luke_Star
post
Post #3





Grupa: Zarejestrowani
Postów: 129
Pomógł: 2
Dołączył: 17.01.2005

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


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

Ten post edytował Luke_Star 16.12.2007, 18:27:18
Go to the top of the page
+Quote Post
ayeo
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 1 202
Pomógł: 117
Dołączył: 13.04.2007
Skąd: 127.0.0.1

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


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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Ten post edytował ayeo 16.12.2007, 18:34:33
Go to the top of the page
+Quote Post
Luke_Star
post
Post #5





Grupa: Zarejestrowani
Postów: 129
Pomógł: 2
Dołączył: 17.01.2005

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


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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) No nic musi mi chyba wystarczyc to co mam
Go to the top of the page
+Quote Post
ayeo
post
Post #6





Grupa: Przyjaciele php.pl
Postów: 1 202
Pomógł: 117
Dołączył: 13.04.2007
Skąd: 127.0.0.1

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


Jeśli masz 15 kategorii to sobie odpal PHPMYADMIN i sobie pozmieniaj ręcznie (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
Luke_Star
post
Post #7





Grupa: Zarejestrowani
Postów: 129
Pomógł: 2
Dołączył: 17.01.2005

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


bardzo śmieszne (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
Nattfarinn
post
Post #8





Grupa: Zarejestrowani
Postów: 136
Pomógł: 22
Dołączył: 19.09.2007
Skąd: Sosnowiec

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


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 (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)

Ten post edytował Nattfarinn 16.12.2007, 19:15:14
Go to the top of the page
+Quote Post
ayeo
post
Post #9





Grupa: Przyjaciele php.pl
Postów: 1 202
Pomógł: 117
Dołączył: 13.04.2007
Skąd: 127.0.0.1

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


Cytat
PS. Wybaczcie to łopatologiczne porównanie do warzyw, ale mam właśnie dobry humor (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)


Nie martw się, przejdzie Ci (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post

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: 20.12.2025 - 16:43