mysql - 从表中选择次日发生
问题描述
这是我的桌面游戏日的数据库结构。每场比赛在晚上 8:00 结束。这里所有的游戏 id 都是相同的。所以现在我想通过游戏 id 像这样查询,如果今天是星期一并且在晚上 8:00 之前,那么它只会获取值为 day='Monday' 的 game_days。一旦晚上 8:00 结束,它将显示值为 day='Wednesday' 的行,直到周三晚上 8:00,晚上 8:00 之后,它将显示值为 day='Friday' 的行,直到星期五 8: 00pm,然后在星期五晚上 8:00 之后再次显示星期一...
那么对此的查询是什么?
解决方案
Please try this (updated based on comments, replace table_name with appropriate table name is your db):
SELECT *
FROM `table_name`
WHERE day = (
SELECT t3.day FROM `table_name` as t3
LEFT JOIN (
SELECT HOUR(NOW()),
CASE
WHEN HOUR(NOW()) <= 19 THEN DAYNAME(NOW() + INTERVAL t.p DAY)
ELSE DAYNAME(NOW() + INTERVAL (t.p + 1) DAY)
END AS day,
CASE
WHEN HOUR(NOW()) <= 19 THEN t.p
ELSE t.p + 1
END as p
FROM (
SELECT 0 as p
UNION SELECT 1 as p
UNION SELECT 2 as p
UNION SELECT 3 as p
UNION SELECT 4 as p
UNION SELECT 5 as p
UNION SELECT 6 as p
) t
) t2 on t3.day = t2.day
ORDER BY t2.p ASC LIMIT 1
)
推荐阅读
- java - finalize 方法获取不在请求范围内的非法状态异常
- c# - 如何在 xamarin.forms.maps (iOS) 中的 Label 上设置背景颜色和更改字体颜色?
- sql - 不同列的条件计算
- angular-material - 带有字符串数组的角度材质数据源过滤器
- angular - 扩展类时找不到名称扩展错误
- javascript - 在被点击的卡片下的列表中插入一个 div
- python - 如何在 PyOpenGL 中删除传递
- selenium - 如何在 Log4j 中创建单独的日志
- angular - 当我将 Angular 12 服务器与 PUG 集成时崩溃
- javascript - 反应 onClick 事件触发一次点击太晚了