krzychu106
27.07.2009, 18:09:41
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
27.07.2009, 18:11:30
W get podajesz odpowiednią zmienną skrypt ją odczytuje i wysyła odpowiednie zapytanie do bazy.
krzychu106
27.07.2009, 18:36:56
Można troszkę jaśniej ?

Nie biegam w php tylko chodze więc niektóre sprawy trafiają do mnie wolniej i potrzebuje je troszke bardziej wyjaśnione.
pozdr
kfc4
27.07.2009, 18:39:15
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
27.07.2009, 18:49:03
Na chwile obecną wyciągam z bazy informację o produktach tak:
<?php
$qur_prod = mysql_query("SELECT id, name, alias, mini1, short_desc, pdf FROM products WHERE cid = '$id'"); ?>
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
27.07.2009, 18:53:02
Po czym chcesz sortować jak nie po ID? Po nazwie? Po aliasie? Po czym? Bez tej informacji niewiele uzyskasz.
krzychu106
27.07.2009, 19:01:07
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
27.07.2009, 19:26:54

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
27.07.2009, 20:28:44
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
27.07.2009, 23: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
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
28.07.2009, 16:28:40
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
28.07.2009, 17:06:43
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:
- z pozycji drugiej wędruje na gdzieś poza zakresem
- zamieniający element wędruje na drugą pozycję
- tamten pozostały na 169
krzychu106
29.07.2009, 08:45:45
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
29.07.2009, 10:41:32
no to wtedy dla rekordów 3-168 dajesz update z position = position+1.
krzychu106
3.08.2009, 07:10:27
Nie widzę tego - możesz przybliżyć na przykładzie ?
Pawel_W
3.08.2009, 07:13:08
zwiększasz pozostałym pozycję o 1, tak jak chciałes...
UPDATE jakas_tabela SET position = position + 1 WHERE position >= 3 AND position <= 168
chyba o ot chodzi
krowal
3.08.2009, 11:48:07
No lol... a jak masz 200000000 rekordów to im wszystkim też będziesz zmieniał pozycję ?

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
3.08.2009, 11:49:34
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.