2010-09-02 79 views
1

我有以下查询:选择WHERE日期比当前日期更大

SELECT id 
FROM auctions 
WHERE end_dt > TIME_TO_SEC(TIMEDIFF(end_dt, now())) > '0' 
GROUP BY auctions.id 
ORDER BY end_dt ASC 
LIMIT 15 

这实在是太慢了。但基本上,我们试图通过检查剩余秒数是否大于零来选择最近的15条即将“结束”的记录。

我觉得我过于复杂了,而且想我可以做这样的事情:

SELECT id 
FROM auctions 
WHERE end_dt > now() 
GROUP BY auctions.id 
ORDER BY end_dt ASC 
LIMIT 15 

然而,这将返回不同的结果。

有没有人有更好的解决方案?

谢谢!

+0

1.如果你只需要'id' - 那么不要对它进行分组,而是使用'DISTINCT'来代替。 2.另外 - 确保你有'end_dt + id'(按照这个特定的顺序)复合索引 – zerkms 2010-09-03 00:21:52

回答

2

尝试

WHERE `end_dt` BETWEEN DATE_SUB(NOW() , INTERVAL 15 MINUTE) 
          AND NOW() 

来源:MySQL Select rows where timestamp column between now and 10 minutes ago

+0

如果我知道你在打开,我会一直等你放下它= D – krx 2010-09-02 21:15:53

+2

单引号会导致封装文本被视为字符串/ varchar - 我将单引号更改为反引号,但只有引用同时也是[MySQL保留字]的列/表名时才需要反引号(http://dev.mysql.com/doc/refman /5.1/en/reserved-words.html) – 2010-09-02 21:15:55

+0

这也给了我不同的结果。 – dzm 2010-09-02 23:20:34

0

好它结束了做END_DT>现在()正确的 - 被插入如此多的记录,它甚至秒,它采取之间改变了再试一次..

相关问题