Php Mysql统计艺术家的歌曲总数

Php Mysql统计艺术家的歌曲总数,php,mysql,Php,Mysql,嗨,我需要mysql的帮助 我有两个表艺术家和歌曲艺术家,现在我想得到艺术家的歌曲总数 **Artist** table **id** | **artist_name** 1 | Artist Name1 2 | Artist Name2 3 | Artist Name3 **song_artist** table id | song_id | artist_id 1 | 2 | 6 2 | 3 | 5 3 | 2 | 7 4 | 4 | 6 5 | 6 | 8 现在我要把它像这样放出

嗨,我需要mysql的帮助

我有两个表艺术家歌曲艺术家,现在我想得到艺术家的歌曲总数

**Artist** table
**id** | **artist_name**
1  | Artist Name1
2  | Artist Name2
3  | Artist Name3

**song_artist** table
id | song_id | artist_id
1 | 2 | 6
2 | 3 | 5
3 | 2 | 7
4 | 4 | 6
5 | 6 | 8
现在我要把它像这样放出去

Artist1 (2 songs)
Artist2 (1 songs)
Artist3 (5 songs)
现在我在2个查询中得到这个结果,但是我想用一个查询来获得所有细节

这是我当前的代码

$query = "select id, artist_name from artist order by artist_name";
$result=mysql_query($query);
while($row = mysql_fetch_array($result)){

  $query2 = "select COUNT(artist_id) as total_songs from song_artist WHERE artist_id = '".$row['id']."'";
  $result2=mysql_query($query2);
  echo $row['artist_name']." (".$row2['total_songs'].")<br>";
}
$query=“按艺术家姓名从艺术家订单中选择id、艺术家姓名”;
$result=mysql\u query($query);
while($row=mysql\u fetch\u数组($result)){
$query2=“选择COUNT(artist_id)作为song_artist中的歌曲总数,其中artist_id=”“$row['id]”。”;
$result2=mysql\u查询($query2);
echo$row['Artister_name'].”(“$row2['total_songs'.])”
”; }
请帮我解决这个问题。

试试看

select concat(artist_name, '( ',  count(song_id), ' )') from artist 
       join song_artist on artist.id = song_artist.artist_id 
       group by artist.id, artist_name
试一试


如果还希望显示包含0首歌曲的艺术家,请将查询中的
加入
替换为
左加入

我不会在查询中连接字符串。 我会这样做:

$query = "SELECT ar.artist_name, COUNT(*) AS total_songs 
            FROM Artist ar
            JOIN song_artist sa ON sa.artist_id = ar.id
           GROUP BY ar.id";
$result=mysql_query($query);
while($row = mysql_fetch_array($result)){
    echo $row['artist_name']." (".$row['total_songs'].")<br>";
}
$query=“选择ar.artist\u名称,将(*)计算为歌曲总数
来自艺术家阿尔
加入song_artist sa ON sa.artist_id=ar.id
按ar.id分组”;
$result=mysql\u query($query);
while($row=mysql\u fetch\u数组($result)){
echo$row['Artister_name'.]。”(“$row['total_songs'.])”
”; }
如果您还想显示包含0首歌曲的艺术家,则将查询中的
加入
替换为
左加入

我不会在查询中连接字符串。 我会这样做:

$query = "SELECT ar.artist_name, COUNT(*) AS total_songs 
            FROM Artist ar
            JOIN song_artist sa ON sa.artist_id = ar.id
           GROUP BY ar.id";
$result=mysql_query($query);
while($row = mysql_fetch_array($result)){
    echo $row['artist_name']." (".$row['total_songs'].")<br>";
}
$query=“选择ar.artist\u名称,将(*)计算为歌曲总数
来自艺术家阿尔
加入song_artist sa ON sa.artist_id=ar.id
按ar.id分组”;
$result=mysql\u query($query);
while($row=mysql\u fetch\u数组($result)){
echo$row['Artister_name'.]。”(“$row['total_songs'.])”
”; }
注意:可能有更多性能更好的替代方案


注意:可能有更多性能的替代方案。

按id进行分组的目的是什么(顺便问一下,在这个查询中,
artist.id
song\u artist.id
)?在mysql中,您不能通过
+
真正在一个查询中进行分类。不确定这是淘气还是好:)。注意,您需要使用
CONCAT()
。按id进行分组的目的是什么(顺便问一下,在这个查询中,id是不明确的-
artist.id
song\u artist.id
)?在mysql中,您不能通过
+
在一个查询中进行真正的分类。不确定这是淘气还是好:)。注意,您需要使用
CONCAT()
。我刚刚注意到来自song\u Artister的艺术家ID都不在艺术家表的ID中!!!我刚刚注意到song_艺人的艺人ID都不在艺人表的ID中!!!