mysql - 在新的行排序中获取值的位置
问题描述
我正在使用 100 组对我的数据进行分页LIMIT
。所以在下面的查询中,我们有按文件名排序的王子歌曲的第 5 页:
SELECT Song_Title, Artist_Name, `Record_Company`, Filename
FROM songs
WHERE songs.Filename != '' AND Artist_Name LIKE '%Prince%'
ORDER BY songs.Filename ASC LIMIT 400, 100
我需要做的是在给定查询顺序的情况下找到行的位置。
因此,在下面的示例中,Prince 的争议位于第 2 位,因为它是按文件名排序的。但是,如果我按 Song_Title 对其进行排序,它将位于位置 1。我将能够将此值用作枢轴,因此如果显示由不同的列重新排序,则用户可以保持已选择的值显示。
这是对该查询的尝试:
SELECT Song_Title, Artist_Name, `Record_Company`, Filename, **ROW_NUMBER**
FROM songs
WHERE songs.Filename != '' AND Artist_Name = 'Prince' AND Song_Title = 'Controversy'
ORDER BY songs.Filename ASC
这是表格布局的示例:
+-----------+------------+----------------+--------+
|Song_Title | Artist_Name|`Record_Company`|Filename|
+-----------+------------+----------------+--------+
| Kiss | Prince | WARNER | a |
+-----------+------------+----------------+--------+
|Controversy| Prince | WARNER | b |
+-----------+------------+----------------+--------+
| Cream | Prince | WARNER | c |
+-----------+------------+----------------+--------+
显然,我可以通过查询每一行并仅在内存中找到位置来做到这一点,但考虑到我返回了多少行,这不是一个可行的选择。这在 SQL 中可能吗?
编辑:
我想看到的输出只是所选值的行或行号。我会用它来知道我应该设置我的限制的页面。
编辑2:
mysql版本:5.6
解决方案
您可以尝试在 mysql 中给出行号:-
SET @row_number = 0;
SELECT (@row_number:=@row_number + 1) AS Slno, Song_Title, Artist_Name, `Record_Company`, Filename
FROM songs
WHERE songs.Filename != '' AND Artist_Name LIKE '%Prince%' AND Artist_Name = 'Prince'
ORDER BY songs.Filename ASC LIMIT 400, 100
如果你想根据组分配行号,那么你可以试试这个:
SET @row_number = 0;
SET @groupnumber = 0
SELECT @row_number:=CASE
WHEN @groupnumber = groupnumber THEN @row_number + 1
ELSE 1
END AS num,
@groupnumber :=groupnumber as groupnumber ,
Song_Title, Artist_Name, `Record_Company`, Filename
FROM songs, (SELECT @groupnumber :=0,@row_number:=0) as t
WHERE songs.Filename != '' AND Artist_Name LIKE '%Prince%'
ORDER BY songs.Filename ASC LIMIT 400, 100
推荐阅读
- python - python字典是什么数据结构?
- sql-server - 参数无效 - System.Drawing.Image.FromStream(Ms)
- inheritance - 设计评论系统的正确方法是什么?
- c++ - 来自 libicu 的 u_snprintf_u 的性能问题
- java - 计算机猜谜游戏中的消息对话框
- suitescript2.0 - suitescript 2.0 无法评估
- sql - 从一个表中选择与另一个表中的 id 匹配的所有列
- python - 在找到或未找到正则表达式模式时记录一条消息(详细 re.sub)
- json.net - 从动态忽略 C# 关键字序列化 JSON
- python - python re.sub() 函数添加附加字符 - e - 垃圾字符