2013-07-24 3 views
2

как сделать заказ в MySQL по имени дня, т.е.: воскресенье, понедельник, вторник, среда так далеезаказа MySQL на DAYNAME

SELECT 
    DAYNAME(dl.bookingDate) AS dayName, COUNT(dg.idDiary) AS totalBooked 
FROM 
    diary_list dl, diary_group dg 
WHERE 
    dl.idDiary = dg.idDiary AND dg.idService != 0 AND dl.status = 3 
GROUP BY 
    dayName 
ORDER BY 
    dayName ??? 
+0

должен быть ORDER BY DAYNAME (дл. bookingDate) – cartina

+0

Нет, DAYNAME возвращает строковое значение, а fe Суббота будет отсортирована до воскресенья. Вместо этого используйте DAYOFWEEK, который возвращает 1 для Su, 2 для Mo и т. Д. – CBroe

+0

Посмотрите на WEEKDAY() из руководства http://dev.mysql.com/doc/refman/5.5/en/date-and- time-functions.html # function_weekday – jeff

ответ

6

Вам нужно добавить функцию DAYOFWEEK к вашим GROUP BY и ORDER BY:

GROUP BY DAYOFWEEK(dl.bookingDate) 
ORDER BY DAYOFWEEK(dl.bookingDate) 

Вы также можете изучить синтаксис явного ANSI стандарта JOIN.

SELECT 
    DAYNAME(dl.bookingDate) AS dayName, COUNT(dg.idDiary) AS totalBooked 
FROM 
    diary_list dl 
JOIN diary_group dg 
    ON dl.idDiary = dg.idDiary 
WHERE 
    dg.idService != 0 AND dl.status = 3 
GROUP BY 
    DAYOFWEEK(dl.bookingDate) 
ORDER BY 
    DAYOFWEEK(dl.bookingDate) 
+0

Вы спасли мой день. мой герой .. Спасибо :) – tonoslfx

2

Вы можете сделать собственные критерии Order:

ORDER BY FIELD(DAY , '3', '4', '5', '6', '7','1', '2') 

В вашем случае:

ORDER BY FIELD(DAY , '7','1', '2', '3', '4', '5', '6') 

Прочитайте эту article для получения дополнительной информации

Смежные вопросы