如何在sql

时间:2015-11-10 15:25:42

标签: mysql sql

我有一张名为饭菜的餐桌,我想要餐点的开头时间大于当前时间,但是在满足这个标准的人中最低,如果没有找到价值,那么我想要最低起始价的餐饮ID 。 表的结构是这样的:

  1. id:int(3)
  2. start:time
  3. 结束:时间
  4. name:varchar(20)
  5. 请尽可能提供sql语句,我已经尝试了很多,但是我遇到了错误。

1 个答案:

答案 0 :(得分:1)

您可以使用order bylimit执行此操作:

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)放置,然后是更早的时间。