Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Brak sortowania wyników
Forum PHP.pl > Forum > PHP
emajl22
Witam,

Próbuję napisać skrypt, który będzie sortował odpowiednio wyniki z bazy, w zależności od tego co jest w $_GET.

Napisałem coś takiego:
  1. switch(secureVariable($_GET['sort'])) {
  2. case 'cos1':
  3. case 'cos2':
  4. $ord = $_GET['sort'];
  5. break;
  6. default:
  7. $ord = 'cos0';
  8. }
  9.  
  10. $show_breakdowns = mysql_query("SELECT * FROM `xxx` ORDER BY `$ord` DESC LIMIT {$from},{$toPage}");
  11.  
  12. <a href="index.php?body=xxx&sort=cos1">id</a>
  13. <a href="index.php?body=xxx&sort=cos2">data zgłoszenia:</a>'

Oczywiście nie działa. Błędów nie wypluwa, po prostu nie sortuje.

I jeszcze prosiłbym o jakąś wskazówkę jak zrobić sortowanie "w te i wewte", czyli po naciśnięciu pierwszego linku sortuje po "cos1 DESC", a po drugim jego naciśnięciu sortuje po "cos1 ASC".

Z góry dzięki.
nospor
Ale wyswietlasz gdzies te dane czy tylko ograniczyles się do mysql_query()?
emajl22
Oczywiście, że wyświetlam. Kopiując tutaj na forum zapomniałem kompletnie o nim.

I źle to trochę ująłem, bo sortowanie działać działa, ale chcę zrobić taki myk, że mam np. coś takiego:

  1. <table>
  2. <tr>
  3. <td><a href="?sort=xxx">Sortuj po XXX</a></td>
  4. <td><a href="?sort=xxx2"> Sortuj po XXX2</a></td>
  5. </tr>
  6.  
  7. // Wyswietlanie rekordow
  8.  
  9. <tr>
  10. <td>$rekord['cos']</td>
  11. <td>$rekord['cos2']</td>
  12. </tr>
  13.  
  14. // Koniec wyswietlania
  15.  
  16. </table>


I teraz po naciśnięciu na "Sortuj po XXX", zapytanie ma pobierać dane sortując je wg. tego co jest w $_GET (+DESC), ale (najważniejsze teraz) po ponownym naciśnięciu "Sortuj po XXX", ma również sortować po tym co jest w $_GET, z tymże ma to robić odwrotnie (ASC). Czyli generalnie mówiąc chodzi mi o sortowanie rosnąco/malejąco.

Już mi ręce opadają, po prostu zgłupiałem przez to...

Będę wdzięczny za pomoc.
nospor
Samo się nie zrobi. Musisz w linku jeszcze dodac kierunek sortowania i budujac link ustawiac ten kierunek w zaleznosci od tego w jakim kierunku aktualnie sortujesz
emajl22
Czyli dodać parametr "order" do adresu tak? Czy może sesje? Jak lepiej?

Później zapytanie ma wyglądać tak?:
  1. $show_breakdowns = mysql_query("SELECT * FROM `xxx` ORDER BY `$ord` $order LIMIT {$from},{$toPage}");
nospor
order do adresu. zostaw sesje w spokoju smile.gif
emajl22
No faktycznie z tymi sesjami to dopieprzyłem ładnie biggrin.gif

Zrobiłem coś takiego:

  1. switch(secureVariable($_GET['sort'])) {
  2. case 'bdid':
  3. case 'date_added':
  4. case 'prioritet':
  5. case 'adress':
  6. case 'status':
  7. case 'date_maked':
  8. $ord = $_GET['sort'];
  9. break;
  10. default:
  11. $ord = 'bdid';
  12. }
  13.  
  14. switch(secureVariable($_GET['order'])) {
  15. case 'desc':
  16. case 'asc':
  17. $order = $_GET['order'];
  18. break;
  19. default:
  20. $order = 'desc';
  21. }

Teraz zapytanie wygląda tak:
  1. $show_breakdowns = mysql_query("SELECT * FROM `breakdown` ORDER BY `$ord` $order LIMIT {$from},{$toPage}");

No i faktycznie - niby działa.

W linku (w tabeli) dałem "?sort=xxx&order=desc", jednak po ponownym tego naciśnięciu na zmienia się zapytanie i sortuje wg. desc. Wiem, że można dać IFa, ale nie wiem czy jest to dobre rozwiązanie, bo jest ok. 10 tych tabel i po wszystkim chcę sortować, więc tych ifów będzie sporo. Jest jakieś inne wyjście?

IF wyglądałby tak:
  1. if ($order=="desc")
  2. $link = "?sort=xxx&order=asc";
  3. else
  4. $link = "sort=xxx&order=desc";
nospor
Napisz funkcję, która przyjmuje parametry:
aktualne pole
pole w linku
aktualne sortowanie

Funkcja sprawdza:
Jesli aktualne pole == pole w linku to sortowanie zwracasz przeciwne do aktualne sortowanie
W przeciwnym wypadku zwracasz sortowanie asc (domyslne)

Funkcję te wywolujesz przy linku i do linka wkladasz to co ci zwroci funkcja.
Zamiast 2*x ifow masz x wywolan funkcji. Proste i przyjemne smile.gif
emajl22
Buhahah, zrobiłem! laugh.gif Rkingsmiley.png
Tylko jakbyś mógł mi wytłumaczyć dlaczego aż trzy parametry mam przekazywać do funkcji, byłoby super.

Moje funkcja:
  1. function getSort($current_field) {
  2. if ($current_field=="desc")
  3. $sort_link = "asc";
  4. else
  5. $sort_link = "desc";
  6. return $sort_link;
  7. }

Wielkie dzięki za pomoc, nospor.
nospor
Ha, przelec na linkami dla roznych pol a zrozumiesz smile.gif No chyba, ze wynik ci nie przeszkadza smile.gif
emajl22
Hmm... przeleciałem po wszystkich linkach i.. i działa poprawnie. A może o czymś nie wiem? mellow.gif
nospor
Dobra, widać ci nie przeszkadza. Skoro nie przeszkadza znaczy ze wszystko jest ok i nie musisz wiedziec co tam siedzi w mojej chorej glowie winksmiley.jpg
emajl22
No ok, ważne, że działa, a co będzie w przyszłości to się okaże i najwyżej zapyta jeszcze raz. Wielkie dzięki za pomoc.

Problem rozwiązany.
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.