mysql查询中的下一行和上一行

时间:2011-05-06 15:17:50

标签: mysql next

如何在查询中选择总共六行的下一行和上一行,但条件为:

我总是有6行,所以如果我有:

1, 2, 3, 4, 5, 6, 7, 8, 9

我的ID是2,结果必须是:

1,3,4,5,6,7

如果我的ID为5,则结果必须为:

2,3,4,6,7,8

如果我的ID为9,则结果必须为:

3,4,5,6,7,8

编辑:

(SELECT * FROM articulos 
      WHERE categoria = 'Y'
      AND numero >= 
       (SELECT IF(
          (SELECT COUNT(*) FROM articulos WHERE numero < X AND categoria = 'Y')<3,
          (SELECT MIN(X) FROM articulos WHERE categoria = 'Y'),
          (X-3)
       ))
      ORDER by numero ASC LIMIT 6)
UNION
(SELECT * FROM articulos 
      WHERE categoria = 'Y'
      AND numero <= 
       (SELECT IF(
          (SELECT COUNT(*) FROM articulos WHERE numero > 1605 AND categoria = 'Y')<3,
          (SELECT MAX(X) FROM articulos WHERE categoria = 'Y'),
          (X+3)
       ))
      ORDER by numero DESC LIMIT 6)

也许这就是解决方案

1 个答案:

答案 0 :(得分:1)

这样的事情:

 SELECT data
 FROM table
 JOIN ( SELECT 
    CASE 
       WHEN n > MAX(id)-3 THEN MAX(id) - 7
       WHEN n < 4 THEN 0
       ELSE n - 4 
    END AS lower_bound,
    CASE 
       WHEN n > MAX(id)-3 THEN MAX(id) + 1
       WHEN n < 4 THEN 7
       ELSE n + 4 
    END AS upper_bound
    FROM table ) AS t1
 WHERE id BETWEEN t1.lower_bound AND t1.upper_bound
 AND id <> n

应始终选择6行

有关CASE函数in the docs

的更多信息
相关问题