Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sortowanie wyników
Forum PHP.pl > Forum > Bazy danych > MySQL
shycat
Witam, zastanawia mnie jak posortować wyniki pewnej bazy portalu:

Kolumny w tabeli:

  1.  
  2. `id`, `pay_typ`, `pay_do`, `ostatnie_logowanie`
  3.  



pay_typ - typ konta jakie posiada uzytkownik (1-darmowe, 2-srebrne, 3-zlote)
pay_do - czas, do kiedy dana usluga platnosci jest wazna - czas w sekundach (time())
ostatnie_logowanie - czas ostatniego logowania - rowniez time()


funkcja do sprawdzania typu platnosci:

  1.  
  2. typ_konta($pay_typ,$pay_do)
  3. {
  4. $time=time();
  5. $ret=1;
  6.  
  7. if ($pay_typ=='2' && $pay_do>$time) $ret=2;
  8. else if ($pay_typ=='3' && $pay_do>$time) $ret=3;
  9.  
  10. return $ret;
  11. }
  12.  



Okey... i teraz jakim zapytaniem do MySQL mozna posortowac wyniki id tak, aby jako pierwsze pojawialy sie wszystkie konta Zlote, posortowane malejaca wg. `ostatnie_logowanie`, a nastepnie wszystkie konta Srebrne i Darmowe rowniez malejaca, ale juz bez dzielenia Srebrne i Darmowe, tylko po prostu wg. `ostatnie_logowanie`
zbig
Witam!

Mniej wiecej tak
  1. SELECT m1.* FROM (
  2. SELECT * FROM moja_tabela WHERE pay_typ = 1
  3. ORDER BY ostatnie_logowanie
  4. )m1
  5. UNION
  6. SELECT m2.* FROM (
  7. SELECT * FROM moja_tabela WHERE pay_typ > 1
  8. ORDER BY ostatnie_logowanie
  9. )m2


Pisalem z glowy ale mysle ze powinno byc ok.

Pozdrawiam
pmir13
  1. SELECT * FROM tabela
  2. ORDER BY pay_typ<3,ostatnie_logowanie DESC

O kolejności decyduje więc najpierw wynik wyrażenia pay_typ<3, a potem czas ostatniego logowania malejąco.
pay_typ<3 będzie równe 0 dla złotych, czyli idzie najpierw
pay_typ<3 będzie równe 1 dla reszty, czyli potem
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.