Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/33.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
Php 通过联接表获取多行_Php_Mysql - Fatal编程技术网

Php 通过联接表获取多行

Php 通过联接表获取多行,php,mysql,Php,Mysql,我有一张专辑的id,我想从他们的艺术家那里得到专辑中的所有曲目。一张专辑有许多曲目。一首歌曲有许多制作人(艺术家) MySQL结构 问题 我不知道我是否可以用完整的mySQL或者我是否应该添加一些PHP 编辑:我的问题不够清楚。问题不在于使用联接表进行查询,而在于使用艺术家列表获取曲目。你可以通过小组讨论来解决这个问题 教程:这取决于您需要数据的方式。如果你对艺人更感兴趣,那么你可以加入专辑中的曲目,然后加入艺人的曲目。这将为您提供每位艺术家的唱片 SELECT ar.* FROM a

我有一张专辑的id,我想从他们的艺术家那里得到专辑中的所有曲目。一张专辑有许多曲目。一首歌曲有许多制作人(艺术家)

MySQL结构

问题

我不知道我是否可以用完整的mySQL或者我是否应该添加一些PHP

编辑:我的问题不够清楚。问题不在于使用联接表进行查询,而在于使用艺术家列表获取曲目。你可以通过小组讨论来解决这个问题


教程:

这取决于您需要数据的方式。如果你对艺人更感兴趣,那么你可以加入专辑中的曲目,然后加入艺人的曲目。这将为您提供每位艺术家的唱片

SELECT
    ar.*
FROM albums AS al
JOIN tracks AS t
    ON t.album_id = al.album_id
JOIN produced AS p
    ON p.produced_track = t.track_id
JOIN artists AS ar
    ON ar.artist_id = p.produced_artist
如果您对这些曲目更感兴趣,只需要列出艺术家,那么请执行相同的加入操作,但在艺术家名称上使用group_concat,并根据曲目id使用group_concat

SELECT
    t.*,
    GROUP_CONCAT(DISTINCT ar.name ORDER BY ar.name SEPARATOR ', ') AS artists
FROM albums AS al
JOIN tracks AS t
    ON t.album_id = al.album_id
JOIN produced AS p
    ON p.produced_track = t.track_id
JOIN artists AS ar
    ON ar.artist_id = p.produced_artist
GROUP BY t.track_id
了解:

选择*
从轨道
连接在producted.producted\u track=Tracks.track\u id上生成
加入美术师上的美术师。美术师\u id=已制作。已制作\u美术师
其中Tracks.track_相册=?

最好在纯SQL中这样做:

SELECT * 
FROM albums al
LEFT JOIN tracks tr ON (tr.ttack_album = al.album_id)
LEFT JOIN produced pr ON (pr.produced_track = tr.track_id)
LEFT JOIN artists ar ON (ar.artist_id = pr.produced_artist)
WHERE al.album_id = thealbumid;

但是,没有任何东西可以阻止您根据需要如何使用数据来执行单独的查询。

您可以而且应该使用纯MySQL来执行这些操作,使用三个表,使用外键链接它们,并使用联接进行查询

您不需要PHP来重载工作,MySQL可以很好地处理它:)

您可以使用MySQL来实现这一点:

SELECT * FROM Albums a
LEFT JOIN Tracks b
ON a.album_id = b.track_album
LEFT JOIN Produced c
on b.track_id = c.produced_track
LEFT JOIN Artist d
on c.produced_artist = d.artist_id
WHERE a.album_id = ? 

您可以使用聚合函数和GROUPBY子句在SQL中实现这一点

它应该是这样的: 选择t.*, 一些聚合函数(a.whatever) 从t轨道 左连接生成p on(t.trac_id=p.producted_id) 左连接艺术家a on(p.producted\u Artist=a.Artist\u id)
按t.*

使用纯mySQLDo先做对您来说最简单的事情,然后其他解决方案可能会变得更明显。您知道您要获取其轨迹的ablum的id吗?group concat就是解决方案!非常感谢,我的问题还不够清楚!