Mysql:获取上一个日期并打破循环

时间:2014-04-06 23:51:57

标签: mysql date loops

我正在尝试从mysql表中获取下一行和上一行。 问题不在于在prev查询中获取以前的打破循环(或者接下来,它是相同的)。

这里的表格:

CREATE TABLE IF NOT EXISTS `my_events` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(50) DEFAULT NULL,
  `date_start` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

和数据:

INSERT INTO `my_events` (`id`, `title`, `date_start`) VALUES
    (1, 'event prev 1', '2014-04-06 10:00:00'),
    (2, 'current event', '2014-04-08 11:00:00'),
    (3, 'event prev 2', '2014-04-06 10:00:00'),
    (4, 'event prev far', '2014-04-04 08:00:00');

您在“当前事件”页面上,这是获取最近的上一个事件的请求

SELECT * FROM my_events
WHERE id != 2 AND date_start <= '2014-04-08 11:00:00'
ORDER BY date_start DESC, id DESC
LIMIT 1

它返回事件'event prev 2'。细

现在,错误

on'event prev 2':

SELECT * FROM my_events
WHERE id != 3 AND date_start <= '2014-04-06 10:00:00'
ORDER BY date_start DESC, id DESC
LIMIT 1

返回'event prev 1':确定

on'event prev 1':

SELECT * FROM my_events
WHERE id != 1 AND date_start <= '2014-04-06 10:00:00'
ORDER BY date_start DESC, id DESC
LIMIT 1

返回'event prev 2': LOOP

事件4(event prev far)永远不会出现

有关于如何解决这个问题的想法吗?

由于

1 个答案:

答案 0 :(得分:1)

我不确定您要实现的目标,但您的事件prev 1 事件prev 2 具有完全相同的日期&amp;时间和你在比较日期时使用<=,所以当你在其中任何一个时,你总会得到另一个。如果您将<=更改为<,您将获得 event prev far