找到具有特定值的行,然后选择下一行X行

时间:2017-04-26 13:06:29

标签: mysql

我想尝试做一些相对简单的事情,我猜,但我无法绕过它。

我想在表格中找到某个ID,然后选择符合特定条件的下一行X行。

示例表:

+++++++++++++++++++++++++++++++
| id | type | value | sorting |
+++++++++++++++++++++++++++++++
|1   | 'x'  | 'foo' | 1       |
|2   | 'y'  | 'bar' | 5       |
|3   | 'z'  | 'foo2'| 9       |
|4   | 'z'  | 'bar2'| 29      |
|5   | 'x'  | 'foo3'| 3       |
|6   | 'z'  | 'bar3'| 11      |
|7   | 'z'  | 'foo4'| 4       |
+++++++++++++++++++++++++++++++

我想要的是从type = 'z'的行开始选择id = 3的下一行X行,按sorting排序。

因此,对于此表,我希望按顺序获取标识为3, 6, 4的行。请注意,标识为7的行与该类型匹配,但其sorting值低于标识为3的行。

这可以在一个查询中完成吗?

我的想法:对于示例表,这样做会: SELECT * FROM table WHERE type = 'z' AND sorting > 9 ORDER BY sorting LIMIT 3, X

但显然,我还不知道值9和偏移量,所以我需要一种方法:

  1. 找到ID 3的排序值。
  2. 找到ID 3的偏移量。
  3. 将这些应用于查询。
  4. 编辑:我现在在哪里:

    SELECT 
    *
    FROM table
    WHERE type = 'z' AND sorting > (SELECT sorting FROM table WHERE id = 3)
    ORDER BY sorting 
    LIMIT 0, 25 
    

    所以最后一步是获取3的偏移量并将其作为第一个参数传递给LIMIT。

1 个答案:

答案 0 :(得分:0)

您的目标仍不明确。但这是我的尝试:

http://sqlfiddle.com/#!9/2d389/1

SELECT t1.*
FROM foobar t1
JOIN (SELECT *
      FROM foobar 
      WHERE id=3
) t2 
ON t1.id >= t2.id
   AND t1.type = t2.type
   AND t1.sorting >= t2.sorting
ORDER BY sorting
LIMIT 10