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的新手.
感谢您的时间和关注.享受帮助我.
这是将返回所有三个记录的查询.
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)
最简单的方法是利用这样一个事实:尽管不是连续的,但是你的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.
请注意,您不需要使用`来划分表和列名称.