Я понимаю, что это старая ветка, но, поскольку она подходит к началу Google в течение определенного времени поиска, я буду использовать ее, чтобы поделиться своим подходом.
Я хотел получить тот же результат, что и в исходном вопросе, но кроме того, я хотел упорядочить результаты, начиная с текущего дня недели, а затем продвигаться до конца дня.
Я создал отдельную таблицу, в которой дни были перечислены в течение двух недель, чтобы независимо от того, с какого дня вы начали, вы могли проходить последовательность из 7 дней.
CREATE TABLE IF NOT EXISTS `Weekdays` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=15 ;
INSERT INTO `Weekdays` (`id`, `name`) VALUES
(1, 'Monday'),
(2, 'Tuesday'),
(3, 'Wednesday'),
(4, 'Thursday'),
(5, 'Friday'),
(6, 'Saturday'),
(7, 'Sunday'),
(8, 'Monday'),
(9, 'Tuesday'),
(10, 'Wednesday'),
(11, 'Thursday'),
(12, 'Friday'),
(13, 'Saturday'),
(14, 'Sunday');
Затем я запустил запрос с переменной, которая определила начальную точку в последовательности, и использовал соединение, чтобы получить номер заказа для дней. Например, чтобы начать листинг в среду, я делаю следующее:
SELECT @startnum := MIN(id) FROM Weekdays WHERE name='Wednesday';
SELECT * FROM Events INNER JOIN ( SELECT id as weekdaynum, name as dayname FROM Weekdays WHERE id>(@startnum-1) AND id<(@startnum+7) ) AS s2 ON s2.dayname=Events.day ORDER BY weekdaynum;
Надеюсь, это поможет тому, кто наткнется на этот пост.