如何创建只在一条特定记录的前后显示的mysql查询?
我有一个按字母顺序排列的查询如何创建只在一条特定记录的前后显示的mysql查询?,mysql,sql,Mysql,Sql,我有一个按字母顺序排列的查询 select id, color_name from colors order by color_name 输出 | 4 | blue | 1 | red | 2 | violet | 3 | yellow 我想查询特定记录的前后记录。示例:红色 期望输出: | 4 | blue | 1 | red | 2 | violet 谢谢。尝试使用工会: SELECT A.id, A.color_name FROM ( ( SELECT id, c
select id, color_name from colors order by color_name
输出
| 4 | blue
| 1 | red
| 2 | violet
| 3 | yellow
我想查询特定记录的前后记录。示例:红色
期望输出:
| 4 | blue
| 1 | red
| 2 | violet
谢谢。尝试使用工会:
SELECT A.id, A.color_name FROM (
(
SELECT id, color_name FROM colors
WHERE color_name <= 'red'
ORDER BY color_name DESC
LIMIT 2
)
UNION
(
SELECT id, color_name FROM colors
WHERE color_name > 'red'
ORDER BY color_name ASC
LIMIT 1
)
) as A
ORDER BY A.color_name
您可以使用一个变量对结果集进行排序,然后将相同的结果集连接到自身,其中颜色名称为红色,且排名编号在“红色”排名的1个位置内:
SELECT b.id, b.color_name
FROM
(
SELECT a.*, @rn:=@rn+1 AS rn
FROM colors a
CROSS JOIN (SELECT @rn:=0) AS var_init
ORDER BY a.color_name
) a
INNER JOIN
(
SELECT a.*, @rn2:=@rn2+1 AS rn
FROM colors a
CROSS JOIN (SELECT @rn2:=0) AS var_init
ORDER BY a.color_name
) b ON a.color_name = 'red' AND a.rn IN (b.rn-1, b.rn, b.rn+1)
如果您碰巧正在搜索列表开头或结尾的颜色,那么当然,只会显示两个结果
查看演示可能不是最好的方法,但您可以将表选择到按颜色名称排序的临时表/表变量中,并添加标识列。然后,您可以从颜色=红色的临时表或红色的标识+/-1之间的标识列中进行选择
select id, color_name from (
select rowno, id, color_name from (
select @rownum:=@rownum+1 rowno, id, color_name from
colors, (select @rownum:=0) t1
order by color_name
) t2
where rowno in (@row:=(
select rowno from (
select @rownum:=@rownum+1 rowno, color_name
from colors, (
select @rownum:=0) t3
order by color_name
) t4
where color_name = "red"), @row + 1, @row -1 )) t5