2009-11-27 99 views
0

我需要一个查询,将获取一个单一的项目之前,一个特定的Id和一个项目后,相同的Id。MySQL查询获取兄弟姐妹

例如我有五行,id的1到5,我需要选择ID前后的id 3,以便我得到2和4作为结果。

有没有办法用一个查询来做到这一点?

编辑:

我忘了告诉大家,也许结果不会是兄弟,但一个同级符合标准:

SELECT routeId FROM routes WHERE routeId>::p0:: AND assetKmId<>'0' 

所以下一个或前一个兄弟应该匹配assetKmId <>“0”(这routeId> :: p0 ::在这种情况下是无效的)

回答

1

为什么不使用最大值,最小值和工会结果

SELECT min(routeId) FROM routes WHERE routeId>::p0:: AND assetKmId<>'0' 
UNION 
SELECT max(routeId) FROM routes WHERE routeId<::p0:: AND assetKmId<>'0' 
0

这不工作?

SELECT * FROM :tablename 
WHERE id = :yourid - 1 OR id = :yourid + 1 

当然,您应该在查询中设置表名和ID参数。

+0

看到编辑,对不起我没有进一步解释 – dfilkovi 2009-11-27 10:43:06

+0

啊,所以你想要最接近的前后匹配的其他标准 – 2009-11-27 10:45:33

+0

是的,这是正确的 – dfilkovi 2009-11-27 10:47:19

0

炼油solomongaby的解决方案(只是在没有任何用处的,以你的情况下),返回完整的记录,而不是仅仅的ID:

SELECT * 
    FROM routes 
WHERE routeId = (select min(routeId) from routes where routeId >::p0::) 
    AND assetKmId <> '0' 
UNION 
SELECT * 
    FROM routes 
WHERE routeId = (select max(routeId) from routes where routeId<::p0::) 
    AND assetKmId<>'0'