Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Jak zrobić sortowanie produktów w php
Forum PHP.pl > Forum > Przedszkole
krzychu106
Witam
Robię małą stronkę i potrebuję porady jak zrobić sortowanie produktów w php. Dokładnie chodzi o to aby produkty, które są dodawane w panelu do bazy danych można byłko sortować wg uznania - zmieniać ich kolejność wyświetlania na stronie.

pozdrawiam
Fifi209
W get podajesz odpowiednią zmienną skrypt ją odczytuje i wysyła odpowiednie zapytanie do bazy.
krzychu106
Można troszkę jaśniej ? smile.gif Nie biegam w php tylko chodze więc niektóre sprawy trafiają do mnie wolniej i potrzebuje je troszke bardziej wyjaśnione.

pozdr
kfc4
Pobierasz w zmiennej get czy mają być sortowanie rosnące czy malejąco. Później jak masz już tę informację to do zapytania dodajesz orderby costam /decs/.
krzychu106
Na chwile obecną wyciągam z bazy informację o produktach tak:

  1. <?php
  2. $qur_prod = mysql_query("SELECT id, name, alias, mini1, short_desc, pdf FROM products WHERE cid = '$id'");
  3. while($rprod = mysql_fetch_array($qur_prod))
  4. ?>


wiem, że mogę je posortować ORDER BY ASC lub DESC.
Ja potrzebuję posortować to w taki sposób np:
1234567 - posortowane produkty i dokładam 8 produkt i chce aby był na pozycji 3 wyswietlany a nie zgodnie z id na pozycji 8.
kfc4
Po czym chcesz sortować jak nie po ID? Po nazwie? Po aliasie? Po czym? Bez tej informacji niewiele uzyskasz.
krzychu106
Właśnie tutaj mam styki jak to zrobic. Sortując po id jak zmieniałbym kolejność produktów musiałbym zmieniać ich id, a nie mam pojęcia jak to zrobić. A jak nie sortować po id to po czym? i jak to zroibić aby zmieniać sobie dowolnie kolejność produktów?
kfc4
questionmark.gif To teraz nie mam pojęcia co chcesz zrobić. Ustawić te dane tak Ci się podoba czy posortować je jakoś ze składem. Jak się zdecydujesz co chcesz - wróć.
krowal
Jeśli chcesz mieć możliwość zmiany pozycji wyświetlanego elementu to przydało by się dodatkowe pole w tabeli produktów, np position, później musiałbyś sobie napisać skrypt do zmiany tej pozycji. Taki skrypt może obejmować możliwość zmiany pozycji w górę/dół, przesunięcie na początek/koniec, przesunięcie +-10 itp.
krzychu106
Właśnie Krowal o to mi chodzi ale nie mam pomysłu jak zabrac się do skryptu. Będę wdzięczny za jakieś sugestie.

-----------------------
pozdr
z3L
Cytat(krzychu106 @ 28.07.2009, 00:08:55 ) *
Właśnie Krowal o to mi chodzi ale nie mam pomysłu jak zabrac się do skryptu. Będę wdzięczny za jakieś sugestie.

-----------------------
pozdr


Stwórz sobie dodatkowe pole w bazie , przykladowo `order`, wartosc w tym polu wpisuj wg. `id` . I nastepnie podczas edytowania danego produktu daj mozliwosc ustawienia wartosci pola order i sortuj po order. Mozesz dodac dodatkowy mechanizm zamiany miejscami pozycji podczas edycji. ( Zmieniasz order w produkcie na 3, to produkt z orderem 3 ustawiasz na wartosc , ktora byla w polu zmienianym ) . Pewnie sa jakies lepsze rozwiazania, ale nie mam aktualnie glowy do myslenia.

Pozdrawiam.
krzychu106
Cytat
...Zmieniasz order w produkcie na 3, to produkt z orderem 3 ustawiasz na wartosc , ktora byla w polu zmienianym...

Pomysł dobry ale co jak produktów będzie 200 i zajdzie potrzeba za 2 produkt podstawić ten z nr 169. Zamienią się miejscami i produkt 2 wyląduje na 169 miejscu (aby dać go na miejsce 3 to trzeba będzie powtarzać operację zmiany miejsca kilkaset razy)- to nie zda egzaminu przy tej ilości produktów.

Może jakieś inne pomysły, a może się mylę.

pozdr
erix
Cytat
(aby dać go na miejsce 3 to trzeba będzie powtarzać operację zmiany miejsca kilkaset razy)- to nie zda egzaminu przy tej ilości produktów.

Dla mnie, to max trzy zapyania:
  1. z pozycji drugiej wędruje na gdzieś poza zakresem
  2. zamieniający element wędruje na drugą pozycję
  3. tamten pozostały na 169
krzychu106
Max 3 zapytania aby ten z pozycji 169 wylądował na pozycji 2. Ale potrzeba jest taka żeby ten co był na pozycji 2 nie leciał na 169 tylko przesunął się na 3, ten co był na 3 na 4 itd.

pozdr.
erix
no to wtedy dla rekordów 3-168 dajesz update z position = position+1.
krzychu106
Nie widzę tego - możesz przybliżyć na przykładzie ?
Pawel_W
zwiększasz pozostałym pozycję o 1, tak jak chciałes...

  1. UPDATE jakas_tabela SET position = position + 1 WHERE position >= 3 AND position <= 168


chyba o ot chodzi winksmiley.jpg
krowal
No lol... a jak masz 200000000 rekordów to im wszystkim też będziesz zmieniał pozycję ? biggrin.gif

Np. przesunięcie w górę:
1. Pobierasz rekord przesuwany i rekord następny po nim.
2. W rekordzie przesuwanym zmieniasz pozycję na pozycję następnego rekordu (tego drugiego który pobrałeś) i na odwrót
3. Zapisujesz oba rekordy.
Pawel_W
a czytałeś jego posty wyżej?

no właśnie...

takie rozwiązanie jak ty podałeś już było
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.