MySQL - 选择一行 - 然后选择一行,然后选择一行

Vol*_*lur 5 mysql select row range

我会尽力说清楚.

我需要选择一个特定的行和前一个相对于该选定行的一行,然后选择一行与该选定行相关的一行,而不使用id.这可能吗?简而言之,上一个和下一个.

我不能(也许我只是不知道如何)使用id的原因是因为它们不是按顺序排列的.从这个相当不成熟和随机的例子可以看出,它们存在差距.

TABLE <-the name of the table
+----+----------------------+-------+
| id | name                 | value |
+----+----------------------+-------+
|  1 | some_name            | asf   |
+----+----------------------+-------+
|  4 | hello                | A3r   |
+----+----------------------+-------+
|  5 | how_do_you_do        | HR5   |
+----+----------------------+-------+
|  8 | not_bad              | 00D   |
+----+----------------------+-------+
| 12 | i_like_women         | lla   |
+----+----------------------+-------+
| 13 | are_you_serious      | 1Ha   |
+----+----------------------+-------+
| 15 | nah_i_kid            | Ad4   |
+----+----------------------+-------+
| 17 | it_is_just_the_boobs | Zc5   |
+----+----------------------+-------+
| 18 | thank_god            | 102   |
+----+----------------------+-------+
| 44 | no_kidding           | jjy   |
+----+----------------------+-------+
Run Code Online (Sandbox Code Playgroud)

首先,我需要根据其中一列的特定值选择一行.我知道该怎么做:

SELECT `value` 
FROM `TABLE` 
WHERE name = 'i_like_women'
Run Code Online (Sandbox Code Playgroud)

这将选择id为12的一行,其值为lla.

我需要的是选择另一个至少两行:一行名为'not_bad',另一行名称'are_you_serious'而不指定它.或者,换句话说,相对于所选择的那个,前一个和下一个.

简而言之,应根据一个值选择三行.你可以猜到我是MySQL的新手.

感谢您的时间和关注.享受帮助我.

Ram*_*aja 9

这是将返回所有三个记录的查询.

SELECT * 
FROM `TABLE` 
WHERE id >= (
    SELECT id 
    FROM `TABLE` 
    WHERE id < (SELECT id FROM `TABLE` WHERE name = 'i_like_women')
    ORDER BY id DESC 
    LIMIT 1
)
ORDER BY id ASC
LIMIT 3
Run Code Online (Sandbox Code Playgroud)

  • 根据提问者想要的内容,这可能不适用于第一条记录; 你会带3回而不是2,或者根本没有,因为没有id <1.否则,很好的方法! (2认同)

das*_*ash 7

最简单的方法是利用这样一个事实:尽管不是连续的,但是你的ID是按升序排列的.

例如:

SELECT * FROM Table WHERE id = 8

UNION
--Select the first item less than 8
SELECT * FROM Table WHERE id = (SELECT MAX(id) FROM Table WHERE id < 8)

UNION
--select the first item greater than 8
SELECT * FROM Table WHERE id = (SELECT MIN(id) FROM Table WHERE id > 8)
Run Code Online (Sandbox Code Playgroud)

如果您只知道字符串,那么:

DECLARE _id INT

SELECT _id = id FROM Table WHERE value = 'i_like_women'
Run Code Online (Sandbox Code Playgroud)

然后你可以简单地将它提供_id给上面的查询,而不是8.

请注意,您不需要使用`来划分表和列名称.