Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sortowanie zapytania
Forum PHP.pl > Forum > Bazy danych > MySQL
Goliat
Strona wygląda jak terminarz. Kiedy użytkownik na nią wchodzi z tabeli wyszukiwane są wszystkie sprawy na dzień dzisiejszy. Aktualna godzina musi znaleźć się jako pierwsza, później w kolejności rosnącej.
Na MsSQL jest taki patent:
[sql:1:f3205f3058] SELECT Pole1, godz FROM Tbl
ORDER BY CASE godz WHEN Hour(getdate()) THEN -1 ELSE godz END[/sql:1:f3205f3058]
zamieniając aktualną godzinę na -1 i sortując rosnąco całość układa się tak jak bym chciał.

Próbowałem jakoś tak:
[sql:1:f3205f3058]SELECT Pole1, godz FROM Tbl
ORDER BY ABS(godz-Hour(Now())
[/sql:1:f3205f3058]
Różnica tych samych wartości da zero a reszta będzie miała wartość dodatnią. ABS-wartość bezwzględna.
Tak sobie to wymyślałem ...

Jak wygląda funkcja CASE (czy wogóle jest) w MySql?
Czy wiecie jak uzyć ABS?
Czy ktoś miał podobny problem i jakoś go obszedł?
uboottd
[sql:1:14d5e79199]
SELECT Pole1, godz
FROM Tbl
ORDER BY godz DESC
[/sql:1:14d5e79199]
Goliat
Proponowane sortowanie malejące będzie wyswietlało listę dla godziny 23:00.
Wynik ma wyglądać mniej więcej dla godziny 20:nn
+-------------+
| godz |
+-------------+
| 20 |
| 1 |
| 2 |
....
| 19 |
| 21 |
| 22 ....
użycie DESC da wynik 23, 22, 21, 20, 19 ...
uboottd
[sql:1:d3d5d3244a]
SELECT Pole1, godz
FROM Tbl
ORDER BY if(godz=hour(now()),0,1),godz
[/sql:1:d3d5d3244a]
Goliat
Bym na to nie wpadł ...
Dzięki.
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.