我有这张桌子:

ID      dayNum      dayName     eventTypeID
-------------------------------------------
1       4           Wednesday   1
2       7           Saturday    1


对于eventTypeID,我想选择包含未来或当前日期的行。今天是星期四,那么如何返回dayName是星期六的行?

我只需要一个AND语句用于以下查询:

SELECT      *
FROM        `events`
WHERE       `eventTypeID` = 1
AND         ??


dayNum:

dayNum字段是每天的索引,其中星期一= 1,星期六= 7

如果您能找到答案,只需将今天的日期硬编码为5(星期四)。我已经有了获取今天的dayNum的逻辑,并且与该问题并不是真的相关。

最佳答案

我将按“差异”进行排序,然后这样限制1:

SELECT *
FROM events
ORDER BY MOD(dayNum - DAYOFWEEK(NOW()) + 7, 7)
LIMIT 1


您将需要MOD 7,因此如果当前日期是7,则下一个最近的日期应该是1,等于(-6 MOD 7)。那里有一个额外的+ 7,因为MySQL似乎希望对负数取模后保持负数。

SQLFiddle

10-06 15:24