我有一张名为饭菜的餐桌,我想要餐点的开头时间大于当前时间,但是在满足这个标准的人中最低,如果没有找到价值,那么我想要最低起始价的餐饮ID 。 表的结构是这样的:
请尽可能提供sql语句,我已经尝试了很多,但是我遇到了错误。
答案 0 :(得分:1)
您可以使用order by
和limit
执行此操作:
select m.*
from meals m
where m.time
order by (m.time > $time) desc, -- put the later meals first
time asc -- put the next meal first
limit 1;
它处理获取下一个值和包装以获得第一个值。
我应该注意:为了解决这类问题,你不需要采取差异。这很有用,因为您可以对字符串以及日期和时间使用相同的想法。您只需要能够比较两个值并将它们用于排序键。
表达式(m.time > $time) desc
是一个布尔表达式,被视为整数。在整数上下文中,布尔值被视为0表示false,1表示true。 desc
将" 1" s放在" 0" s之前,因此这将在稍后时间(相对于$time
)放置,然后是更早的时间。