Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL]Podwójny sort w zapytaniu sql
maraska
post
Post #1





Grupa: Zarejestrowani
Postów: 143
Pomógł: 0
Dołączył: 9.04.2013

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
trueblue
post
Post #2





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


  1. AND DATA >= NOW() DESC


--------------------
Go to the top of the page
+Quote Post
maraska
post
Post #3





Grupa: Zarejestrowani
Postów: 143
Pomógł: 0
Dołączył: 9.04.2013

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
trueblue
post
Post #4





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


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

Usunąłeś DESC z pierwszego bloku sortowania.


--------------------
Go to the top of the page
+Quote Post
maraska
post
Post #5





Grupa: Zarejestrowani
Postów: 143
Pomógł: 0
Dołączył: 9.04.2013

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 14:16