Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]Podwójny sort w zapytaniu sql
Forum PHP.pl > Forum > Przedszkole
maraska
Witam.

Mam takie zapytanie

  1. SELECT * FROM tabela1 WHERE $conditions ORDER BY FIELD(waga,\"5\",\"4\",\"3\",\"2\",\"1\",\"0\") DESC


i mam jeszcze w tabeli pole data.

Jak zmienić powyższe zapytanie, żeby osiągnąć następujący wynik:
Najpierw rekordy spełniające kryterium powyższego zapytania i sortu AND data >= NOW()
Następnie rekordy spełniające kryterium powyższego zapytania i sortu AND data < NOW()

Pozdrawiam
trueblue
  1. AND DATA >= NOW() DESC
maraska
Cytat(trueblue @ 2.02.2017, 11:03:10 ) *
  1. AND DATA >= NOW() DESC


  1. SELECT * FROM tabela1 WHERE $conditions ORDER BY FIELD(waga,\"5\",\"4\",\"3\",\"2\",\"1\",\"0\") DESC AND data >= NOW() DESC


nieprawidłowa składnia

  1. SELECT * FROM tabela1 WHERE $conditions ORDER BY FIELD(waga,\"5\",\"4\",\"3\",\"2\",\"1\",\"0\"), data >= NOW() DESC


składnia prawidłowa ale sortuje nie wiadomo jak, np.

waga = 0 data = 2017-07-31 jest w wynikach wyżej niż
waga = 5 data = 2017-08-30

sad.gif
trueblue
Tak bez AND, mój błąd.

Usunąłeś DESC z pierwszego bloku sortowania.
maraska
Cytat(trueblue @ 2.02.2017, 12:16:23 ) *
Tak bez AND, mój błąd.

Usunąłeś DESC z pierwszego bloku sortowania.



  1. SELECT * FROM tabela1 WHERE $conditions ORDER BY FIELD(waga,\"5\",\"4\",\"3\",\"2\",\"1\",\"0\") ASC, data >= NOW() DESC


daje wyniki bez sensu, przykład:
5 2017-07-31 00:00:00
5 2017-11-30 00:00:00
5 2017-05-30 00:00:00
5 2020-12-10 15:57:08
5 2017-08-30 00:00:00
5 2017-08-08 00:00:00
5 2017-12-31 00:00:00
5 2020-05-15 11:18:09
5 0000-00-00 00:00:00
5 0000-00-00 00:00:00
gdzieś dużo niżej
2 2017-08-01 00:00:00
2 2017-05-04 00:00:00
2 2017-07-30 00:00:00
2 2017-05-01 00:00:00
2 2017-08-31 00:00:00
2 2017-12-01 00:00:00
2 2017-10-07 11:07:38
2 2017-12-31 00:00:00
2 2017-07-30 00:00:00
2 2017-07-30 00:00:00


a chodzi o to, żeby było np.

5 2020-12-10 15:57:08
4 2017-08-30 00:00:00
3 2017-08-08 00:00:00
2 2017-12-31 00:00:00
1 2020-05-15 11:18:09
5 0000-00-00 00:00:00
4 0000-00-00 00:00:00
3 0000-00-00 00:00:00
2 0000-00-00 00:00:00
1 0000-00-00 00:00:00



OK, trzeba zmienić kolejność na
  1. SELECT * FROM tabela1 WHERE $conditions ORDER BY DATA >= NOW() DESC, FIELD(waga,\"5\",\"4\",\"3\",\"2\",\"1\",\"0\") ASC


i jest OK.

Dzięki za pomoc
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.