我们在此查询中有两个感兴趣的表。
首先,我们有一张音乐曲目表,每张曲目都有一个独特的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
这是每行一首曲目,每首曲目都有正确的专辑信息。但是我想将这张专辑曲目分成一行。
感谢任何帮助, 甲
答案 0 :(得分:1)
问题是曲目的数量会有所不同,因此您不能提前知道结果集应返回多少列。
如果您愿意接受最大曲目数为10,则可能会生成一个丑陋的查询,这将返回10个曲目,如果给定的专辑少于10个,则其中一些可能为NULL 。
但是你也可以在每个专辑/曲目组合中返回一行,然后通过迭代返回的行来构建你的数据。
干杯,
丹尼尔
答案 1 :(得分:0)
您需要添加的内容基本上是GROUP BY Albums.Album_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
答案 2 :(得分:0)
我认为你需要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
如果您想要确定每个曲目标题的价格,只需将其作为GROUP_CONCAT()的一部分...即可确认语法,但类似
TRIM(Track.Track_Title +"(" + Track.Price +")") 所以连接可能类似于
Album ID Title Image Url AllTracks
1 Some Album Some URL First Track ($.99), Second Track, ($1.29), Third Track...
然而,艺术家是否真的与ALBUM相关联而非赛道?或者您对歌曲作者信息感兴趣......您可能需要相应调整。