【问题标题】:Next and previus rows in a mysql querymysql查询中的下一行和上一行
【发布时间】:2011-08-20 06:50:39
【问题描述】:

如何在查询中选择下一行和上一行,但有条件:

我总是有 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)

也许这就是解决方案

【问题讨论】:

    标签: mysql next


    【解决方案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的信息

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-18
      • 2013-08-19
      • 2023-03-07
      • 1970-01-01
      • 2012-08-15
      • 1970-01-01
      相关资源
      最近更新 更多