2010-11-14 60 views
1

我已经写了一个MySQL语句来选择使用创建时间戳的项目的下一个项目,但是当两个或更多项目具有完全相同的时间戳时,它有问题。为了让事情更加令人困惑,商品ID和创建日期并不总是按顺序排列,请参阅下面的虚拟数据。选择下一个/ prev mysql

ID |创建了
~~~~~~~~~~~~~~~~ 1289780100
11 | 1289780100
12 | 1289780100 < - 当前项目
13 | 1289780100
14 | 1289780050
15 | 1289780150

我需要一个SQL语句,可以通过创建的ID然后选择prev &下一项(两个查询都可以)。我已经厌倦了一些不同的查询,但要么陷入循环,要么两者'prev'&'next'是一样的。

感谢, 欧文

回答

2
SELECT * 
FROM items 
WHERE created >= current_item_created AND ID >= current_item_ID 
ORDER BY created ASC, ID ASC LIMIT 1,1 

SELECT * 
FROM items 
WHERE created <= current_item_created AND ID <= current_item_ID 
ORDER BY created DESC, ID DESC LIMIT 1,1 
+0

感谢AndreKR,也许我在复杂但在一些通常情况下,创建的日期可能并不合适。 (这是因为项目已添加但尚未完成或发布) 例如。如果当前项目在上面的表中是#14,我认为前一个是没有的,下一个是#10 – Owen 2010-11-14 23:36:31

+0

@Owen:然后比较'created'字段和创建的当前项目。 – zerkms 2010-11-14 23:37:35

+0

然后它确实有点复杂,但我认为这些(编辑)的查询应该这样做。 – AndreKR 2010-11-14 23:46:05

2

要获得prev_id:

SELECT 
    t1.id, t1.name, t1.prev as prev_id 
FROM 
(SELECT mt.id, mt.name, @prev_id as prev, @prev_id := id 
FROM `main_table` mt, (SELECT @prev_id:=0) ni 
ORDER BY name ASC) as t1; 

要获得NEXT_ID - 只是改变订货

Here is full example

+0

+1比接受的答案更好。 – Johan 2011-06-05 11:21:40