Натрапила якось в співтоваристві ru_perl на календар на поточний місяць, виведений одним SQL запитом. Дуже сподобалося, хочу поділитися (:
Тут я приведу викладки з самого поста, сподіваюся, авторські права вказувати не треба. Ну і додам короткі відомості про операторів і функціях.
Спочатку навибиралась циферок з запасом:
Оператор UNION використовується для об'єднання роботи декількох SELECTов. Ім'я або псевдонім колонки, запитаний в першому SELECT використовується потім для виведеного результату. Типи даних в кожному із запитів повинні збігатися, в іншому випадку в залежності від версії Масика або підбирається більший, або обрізаються інші. ALL означає, що будуть обрані всі записи, а не тільки унікальні. У нашому запиті це не обов'язково.
Також тут використовується іменування підзапиту (as t) після FROM. Це обов'язково, тому що всі таблиці у FROM-Клаузе повинні бути названі. У мене цей шматок запиту часом глючил на локально встановленому Масик (через phpmyadmin), видаючи # 1 146 - Table 'mysql.t' does not exist.
Повернемося до календаря. Обмежимо кількість днів в останньому стовпчику. Для цього нам треба знати число днів у місяці SELECT DAYOFMONTH (LAST_DAY (NOW ())).
NOW видає сьогоднішню дату, LAST_DAY повертає останнє число місяця для заданої дати у вигляді YYYY-MM-DD, DAYOFMONTH дає номер дня у місяці.
Залишилося нашаманіть, щоб місяць не завжди починався з понеділка. Ось так ми дізнаємося день тижня першого дня, з урахуванням буржуазного звичаю функції DAYOFWEEK починати тиждень з неділі: