![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 68 Pomógł: 0 Dołączył: 8.08.2010 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Borykam się z problemem odpowiedniego sortowania pobranych wyników z bazy danych. W tabeli mam rekordy które przechowują wydarzenia w mieście. Struktura to: id, nazwa, dzien, godzina (gdzie poniedziałek = 1 a niedziela = 7) Chciałbym aby sortowanie było zależne od dnia tygodnia który jest aktualnie. Funkcją date("w") pobieram aktualny dzień tygdnia. Tak formułuje zapytanie: SELECT * FROM wydarzenia WHERE dzien>=$dzien_aktualny ORDER BY dzien ASC LIMIT 1 Problem jest taki, że jeżeli dziś jest środa, to zapytanie wyszuka najbliższe wydarzenie od dziś do niedzieli. Muszę zrobić za pomocą jednego zapytania w taki sposób, że jeżeli od dziś do niedzieli nie ma żadnego wydarzenia to wyszukuje dalej czyli od niedzieli do wtorku. Przykład sortowania: dziś jest środa czyli $dzien_aktualny = 3. Rekordy powinny być sortowane według dni w takiej kolejności 3,4,5,6,7,1,2 Proszę o pomoc. Zależy mi na tym aby było to w jednym zapytaniu. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 744 Pomógł: 118 Dołączył: 14.02.2009 Skąd: poziome Ostrzeżenie: (0%) ![]() ![]() |
SELECT w.*, if(w.dzien>=$dzien_aktualny, 1, 0 ) as jest FROM wydarzenia ORDER BY jest desc, w.dzien ASC LIMIT 1
Albo to co masz + UNION ALL SELECT * FROM ( SELECT * FROM wydarzenia WHERE dzien>=$dzien_aktualny ORDER BY dzien ASC LIMIT 1 UNION ALL SELECT * FROM wydarzenia WHERE dzien<$dzien_aktualny ORDER BY dzien ASC LIMIT 1 ) a LIMIT 1 Ten post edytował maly_swd 27.02.2012, 13:32:03 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 14.10.2025 - 02:49 |