MySQL SELECT 计数器,分组依据

标签 mysql sql

我不确定我所要求的是否可能......但它可能是哈哈。

基本上,我有两个表,轨道和专辑。

我想显示所有轨道的列表并从专辑部分获取名称。

表格如下所示:

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/

相关文章:

mysql - SQL 检索多维数组

mysql - 拒绝用户 'root' @'localhost' 的访问被拒绝(使用密码 : yes) after Ubuntu Upgrade to 20. 04

R中的sqlSave以创建数据帧并将其保存到sql表

sql - knitr sql block 没有将数据保存到变量中

php - Laravel 查询一个时间范围

mysql - 在mysql中存储日期

php - 在 mysql 上交换唯一主 ID?

php - 警告 : mysql_num_rows(): supplied argument is not a valid

mysql - 如何查看何时运行了哪些查询?

mysql - sql : searching for a table, 和在表中搜索数据哪个更快?