我正在尝试从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)永远不会出现
有关于如何解决这个问题的想法吗?
由于
答案 0 :(得分:1)
我不确定您要实现的目标,但您的事件prev 1 和事件prev 2 具有完全相同的日期&amp;时间和你在比较日期时使用<=
,所以当你在其中任何一个时,你总会得到另一个。如果您将<=
更改为<
,您将获得 event prev far 。