Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 将行聚合为一个新行,以及来自其他表的数据_Mysql - Fatal编程技术网

Mysql 将行聚合为一个新行,以及来自其他表的数据

Mysql 将行聚合为一个新行,以及来自其他表的数据,mysql,Mysql,我们在这个查询中有两个感兴趣的表 首先,我们有一个音乐曲目表,每个曲目都有一个独特的PK和一个指向该曲目所属专辑的FK。第二个表是这个相册表 因此,每一行专辑大约有10行曲目 我试图将属于一张专辑的所有曲目加上专辑标题(保存在专辑中)聚合到一行中。这是为了避免繁琐的PHP代码 目前我们有: SELECT Album.Image_URL, Track.Track_Title, Track.Price FROM Album, Track, Artist WHERE (Album.Album_ID=T

我们在这个查询中有两个感兴趣的表

首先,我们有一个音乐曲目表,每个曲目都有一个独特的PK和一个指向该曲目所属专辑的FK。第二个表是这个相册表

因此,每一行专辑大约有10行曲目

我试图将属于一张专辑的所有曲目加上专辑标题(保存在专辑中)聚合到一行中。这是为了避免繁琐的PHP代码

目前我们有:

SELECT Album.Image_URL, Track.Track_Title, Track.Price
FROM Album, Track, Artist
WHERE (Album.Album_ID=Track.Album_ID) AND (Artist.Artist_ID=Track.Artist_ID)
ORDER BY Album.Album_Name ASC
这是每行一首曲目,每首都有正确的唱片集信息。然而,我想把这张专辑的所有曲目放在一行

谢谢你的帮助,
A

您需要添加的基本上是
按相册分组。相册ID

SELECT Album.Image_URL, Album.Album_Name, SUM(Track.Price) As total_price
FROM Album
JOIN Track ON Album.Album_ID=Track.Album_ID
JOIN Artist ON Artist.Artist_ID=Track.Artist_ID
GROUP BY Albums.Album_ID
ORDER BY Album.Album_Name ASC

我认为您需要GROUP_CONCAT()选项。所以,对于一个键,分组为逗号分隔的列表,所有其他键。。。差不多

select 
      Album.ID,  (assuming this column name since not provided)
      Album.Title,
      Album.Image_URL,
      Group_CONCAT( Track.Track_Title ) All_Tracks
  from 
      Album
         join Tracks
            on Album.Album_ID=Track.Album_ID
            join Artist
               onTrack.Artist_ID = Artist.Artist_ID
  group by
      1
Album ID   Title       Image Url   AllTracks
1          Some Album  Some URL    First Track ($.99), Second Track, ($1.29), Third Track...
如果你想为每个曲目标题定价,只需将其作为组_CONCAT()的一部分发布广告即可。。。无法确认语法,但类似

select 
      Album.ID,  (assuming this column name since not provided)
      Album.Title,
      Album.Image_URL,
      Group_CONCAT( Track.Track_Title ) All_Tracks
  from 
      Album
         join Tracks
            on Album.Album_ID=Track.Album_ID
            join Artist
               onTrack.Artist_ID = Artist.Artist_ID
  group by
      1
Album ID   Title       Image Url   AllTracks
1          Some Album  Some URL    First Track ($.99), Second Track, ($1.29), Third Track...
修剪(Track.Track_Title+”(“+Track.Price+”)) 所以浓缩物可能是这样的

select 
      Album.ID,  (assuming this column name since not provided)
      Album.Title,
      Album.Image_URL,
      Group_CONCAT( Track.Track_Title ) All_Tracks
  from 
      Album
         join Tracks
            on Album.Album_ID=Track.Album_ID
            join Artist
               onTrack.Artist_ID = Artist.Artist_ID
  group by
      1
Album ID   Title       Image Url   AllTracks
1          Some Album  Some URL    First Track ($.99), Second Track, ($1.29), Third Track...

然而,这位艺术家不是真的与这张专辑而不是这首歌有联系吗?或者你对歌曲作者信息感兴趣。。。您可能需要进行相应的调整。

问题在于曲目的数量会有所不同,因此您无法提前知道结果集应返回多少列

如果您愿意接受最大曲目数为10,则可以进行一个丑陋的查询,该查询将返回10首曲目,如果给定专辑的曲目数少于10首,则其中一些曲目可能为空

但您也可以只为每个唱片集/曲目组合返回一行,然后通过迭代返回的行来构建数据

干杯


Daniel

问题在于曲目的数量会有所不同,因此您无法提前知道结果集应该返回多少列。如果您愿意接受最大曲目数为10,则可以进行一个丑陋的查询,该查询将返回10首曲目,如果给定专辑的曲目数少于10首,则其中一些曲目可能为空。但是,您也可以只返回每个唱片集/曲目组合的一行,然后通过迭代返回的行来构建数据。您能在回答中对其进行重击吗?可以标记为已回答…:)立即尝试-更改为联接语法。价格列是整数还是文本?如果是文本,那么总和就不起作用了。