Sortowanie wyników w zapytaniu MySQL

Odpowiedz Nowy wątek
2019-01-06 20:27
0

Witam serdecznie.
Mam takie zapytanie:


SELECT A.*, B.surname, B.name , C.url_address, (SELECT CONCAT(file_path, '/', file_name) AS image FROM psUploadedFiles B WHERE enum = 3 and category = A.id_user ORDER by number ASC LIMIT 1) AS image2 , (SELECT CONCAT(file_path, '/', file_name) AS image FROM psUploadedFiles B WHERE enum = 3 and category = A.post_id ORDER by number ASC LIMIT 1) AS image FROM psPosts A LEFT JOIN psUserDetails B ON B.id_user = A.id_user LEFT JOIN psUser C ON C.id_user = A.id_user WHERE A.enable = '1' and ( A.id_user=21 or ( A.id_user = '7' or A.id_user = '1' or A.id_user = '5' ) ) ORDER by date DESC LIMIT 0 , 25 ;

W tabeli psPosts mam kolumnę subscriptions_date (zawierającą datę w formacie yyyy-mm-dd).
subscriptions_date - data do kiedy post będzie promowany.
W jaki sposób mogę posortować wyniki w taki sposób, ażeby na górze były posty zawierające subscriptions_date aktualną lub przyszłą datę (czyli promowane), a pod spodem pozostałe posty?

Pozostało 580 znaków

2019-01-06 20:34

Posortuj względem case ? Chyba, że MySQL jest na tyle słaby, że tego nie potrafi ;-)

ORDER BY  case  when subscriptions_date >=now() then 0 else 1 end, date desc

Dodajesz sztuczną kolumnę, która przyjmuje wartości 0 (data w przyszłości lub bieżąca) albo 1 (data w przeszłości), więc jak posortujesz względem tych wartości, tu subskrypcje promowane będą wcześniej, niż te, dla których okres promocji się skończył.

Sortowanie po innej kolumnie (date) porządkuje Ci rekordy w ramach grup.

ale chyba potrafi sortować po indeksie kolumny - ORDER BY 3 np. tylko, że przy tym zapytaniu to może być ciężkie do ogarnięcia :p - abrakadaber 2019-01-06 23:26

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0