在我的mySQL数据库中,我有一个名为'day'的列。每个培训课程都有不同的一天 - 例如,U12s在周二和周四有一个。我想要的是获取最近会话的数据(现在,那是星期二)。
SELECT *
FROM training
WHERE `day` > dayname(now())
AND `group` = 'U12s'
ORDER by `day`
LIMIT 1
这会产生一个结果,但它会按字母顺序排序'day',因此结果是星期四而不是星期二。
我也试过
SELECT *
FROM training
WHERE `day` > dayofweek(CURDATE())
AND `group` = 'U12s'
LIMIT 1
但这根本没有带来任何结果。
有什么建议吗?
JorgeCampos的解决方案&语法错误:
SELECT *
FROM training
WHERE `day` > dayname(now())
AND `group` = 'U12s'
ORDER BY CASE when `day` = 'Monday' then 1
when `day` = 'Tuesday' then 2
when `day` = 'Wednesday' then 3
when `day` = 'Thursday' then 4
when `day` = 'Friday' then 5
when `day` = 'Saturday' then 6
else 7 end case
LIMIT 1
错误:您的SQL语法出错;检查与MySQL服务器版本对应的手册,以便在'case附近使用正确的语法 在第11行限制1'
答案 0 :(得分:0)
如果您的日期列是日期的名称,并且您的查询已经确定但订单错误,则只需将日期转换为可根据需要订购的值:
SELECT *
FROM training
WHERE `day` > dayname(now())
AND `group` = 'U12s'
ORDER BY CASE when `day` = 'Monday' then 1
when `day` = 'Tuesday' then 2
....
when `day` = 'Saturday' then 6
else 7 end
LIMIT 1