2

抱歉,我知道您想要示例代码,但不幸的是,我完全不知道如何实现此功能或我必须搜索的内容。

假设我们有这种关系:

╔═══════════════════╗
║ id  name  quality ║
╠═══════════════════╣
║ 1   Will  4       ║
║ 2   Joe   9       ║
║ 3   Bill  2       ║
║ 4   Max   1       ║
║ 5   Jan   10      ║
║ 6   Susi  5       ║
║ 7   Chris 6       ║
║ 8   Noa   9       ║
║ 9   Sisi  4       ║
╚═══════════════════╝

现在我需要一个基于我正在搜索的数据的子集。例如,我正在搜索 id 为 5 的记录。在我的结果中,我需要的不仅仅是 Jan 的记录,我还需要 Jan 之前的两条记录和 Jan 后面的两条记录。所以我有以下结果集:

╔═══════════════════╗
║ id  name  quality ║
╠═══════════════════╣
║ 3   Bill  2       ║
║ 4   Max   1       ║
║ 5   Jan   10      ║
║ 6   Susi  5       ║
║ 7   Chris 6       ║
╚═══════════════════╝

你能给我一些关键字来解决这个问题吗?

4

3 回答 3

3
SET @search_id = 5;

SELECT * 
FROM my_table
WHERE id BETWEEN (@search_id - 2) AND (@search_id + 2);
于 2013-10-06T09:56:49.140 回答
2

假设 ID 字段始终按预设顺序排列(可以通过 ID 字段计算特定行之前的两个和之后的两个),您可以执行以下两个简单查询之一:

SELECT * 
FROM   tbl1 
WHERE  id BETWEEN 3 AND 7 

(可以在这里找到一个 SQL Fiddle 演示)

或者:

SET @a:=5; 

SELECT * 
FROM   tbl1 
WHERE  id BETWEEN @a - 2 AND @a + 2 

(可以在这里找到一个 SQL Fiddle 演示)

我希望这能回答你的问题。
如果您需要其他任何东西,请告诉我。

祝你好运!

于 2013-10-06T09:09:47.773 回答
1

SQL 小提琴演示http://sqlfiddle.com/#!2/6b156a/15

(SELECT * FROM test
    WHERE id >= 5
    ORDER BY id
    LIMIT 3)

UNION 

(SELECT * FROM test
WHERE id < 5
ORDER BY id DESC
LIMIT 2)
于 2013-10-06T10:00:07.783 回答