KategorieBazy danych

[MySQL] Jak posortować rekordy według dnia tygodnia ?

Bazy danych dają nam duże możliwości w zakresie ich przeszukiwania i przeglądania zgromadzonych w nich danych. Tak więc powinniśmy opanować podstawowe funkcje jakie nam oferują, taką właśnie funkcją jest funkcja DATE_FORMAT, która tak samo jak funkcja date w PHP pozwala na dowolne sformatowanie daty. To właśnie nią się posłużymy do przesortowania rekordów po dniu tygodnia.

Poniżej przykładowa taela z danymi.

+------------+---------------------+
| Data       | Nazwa               |
+------------+---------------------+
| 1987-01-04 | Jan Kowalski        |
+------------+---------------------+
| 1979-02-03 | Franciszek Nowak    |
+------------+---------------------+
| 1976-08-18 | Katarzyna Piątek    |
+------------+---------------------+
| 1982-04-30 | Anna Kamińska       |
+------------+---------------------+
| 1991-12-27 | Jacek Golda         |
+------------+---------------------+
| 1988-02-21 | Tomasz Baran        |
+------------+---------------------+
| 1982-11-16 | Ewa Mróz            |
+------------+---------------------+

W celu posortowania danych według dnia tygodnia musimy sformatować datę wyciągając z niej numer dnia tygodnia korzystając z funkcji DATE_FORMAT. Funkcja ta ma wiele parametrów dzięki którym możemy wyciągnąć niemal dowolną informację z daty. W naszym przypadku skorzystamy ze zmiennej “%w” która zwraca numer dnia tygodnia.

Aby zobaczyć numery dla każdej daty posłużymy się poniższym zapytaniem:

SELECT 
    Data, Nazwa, DATE_FORMAT(Data, "%w") AS Numer_dnia 
FROM 
    dane

Powinniśmy otrzymać:

+------------+---------------------+------------+
| Data       | Nazwa               | Numer_dnia |
+------------+---------------------+------------+
| 1987-01-04 | Jan Kowalski        | 0          |
+------------+---------------------+------------+ 
| 1979-02-03 | Franciszek Nowak    | 6          |
+------------+---------------------+------------+
| 1976-08-18 | Katarzyna Piątek    | 3          |
+------------+---------------------+------------+
| 1982-04-30 | Anna Kamińska       | 5          |
+------------+---------------------+------------+
| 1991-12-27 | Jacek Golda         | 5          |
+------------+---------------------+------------+
| 1988-02-21 | Tomasz Baran        | 0          |
+------------+---------------------+------------+
| 1982-11-16 | Ewa Mróz            | 2          |
+------------+---------------------+------------+

Przesortowanie rekordów teraz to tylko formalność, przenosimy funkcję formatującą do klauzuli ORDER BY i mamy potrzebne zapytanie:

SELECT 
    Data, Nazwa, DATE_FORMAT(Data, "%w") AS Numer_dnia 
FROM 
    dane 
ORDER BY 
    DATE_FORMAT(Data, "%w")

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *