我不确定我所要求的是否可能......但它可能是哈哈。
基本上,我有两个表,轨道和专辑。
我想显示所有轨道的列表并从专辑部分获取名称。
表格如下所示:
tbl_tracks
id - int, auto increment, primary key
album_id - int
title - varchar 50
和
tbl_albums
id - int, auto increment, primary key
title - varchar 50
现在,我运行查询:
SELECT tbl_tracks
.title
, tbl_albums
.title
FROM tbl_tracks
, tbl_albums
WHERE tbl_tracks
.album_id
= tbl_albums
.id
GROUP BY tbl_tracks
.标题
现在打印出以下列表:
Track1 Artist1
Track2 Artist1
Track3 Artist1
Track1 Artist2
等等等等
(为了清楚起见,我没有发布轨道名称)
现在我想做的是选择另一列按艺术家对每个轨道进行编号,这样上面的查询就会输出:
1 Track1 Artist1
2 Track2 Artist1
3 Track3 Artist1
1 Track1 Artist2
但我想在不向数据库添加任何其他列或没有任何服务器端循环的情况下执行此操作,我该怎么做?
最佳答案
SELECT @rn := if(@g = tbl_albums.id, @rn+1, 1) rownumber,
tbl_tracks.title, tbl_albums.title,
@g := tbl_albums.id
FROM (select @g:=null, @rn:=0) initvars
CROSS JOIN tbl_tracks
INNER JOIN tbl_albums on tbl_tracks.album_id = tbl_albums.id
ORDER BY tbl_albums.id, tbl_tracks.title;
关于MySQL SELECT 计数器,分组依据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5493389/