【发布时间】:2015-02-14 08:43:48
【问题描述】:
我对 PHP/MYSQL 很陌生,发现这很难解释,所以希望有人能理解我想要做什么。我有一个收集艺术家和歌曲信息的数据库。我希望能够将艺术家链接到歌曲并显示带有歌曲信息的“信用”。
我有一个数据库,其中包含类似这样的表:
艺术家 |艺术家 ID,艺术家姓名
学分 | credit_id, credit_name
歌曲 | song_id, song_name
Credit_To_Artist | credit_id、artist_id、song_id
示例数据:
艺术家 | 2、彼得马克
艺术家 | 5、梅特·克里斯蒂安森
学分 | 1、制片人
学分 | 2、作家
学分 | 3、主唱
歌曲 | 23、游戏
Credit_To_Artist | 1、2、23
Credit_To_Artist | 2、2、23
Credit_To_Artist | 3、5、23
我创建了一个页面“song.php”,显示每首歌曲的信息,使用 mysql_real_escape_string 从 URL 中获取歌曲 ID:
$id = mysql_real_escape_string($_GET['id']);
if (!$id) {
die('Please provide an id!');
}
$query = "SELECT * FROM `Credit_To_Artist` AS c2a
INNER JOIN `Credits` AS cr ON cr.credit_id = c2a.credit_id
LEFT OUTER JOIN `Artist` AS a ON a.artist_id = c2a.artist_id
LEFT OUTER JOIN `Song` AS s ON s.song_id = c2a.song_id
WHERE c2a.song_id = $id";
$res = mysql_query($query);
$row = mysql_fetch_assoc($res);
我遇到的问题是,我希望能够列出与该歌曲相关联的所有艺术家,以及他们在旁边括号中的所有作品。由于每首歌都有不止一位艺术家,而且他们中的大多数人都有不止一个功劳(制作人、作家、歌手等),我不知道如何编写一个循环函数来显示这两者。下面是我试图说明我的意思,尽管它显然不起作用:
while ($row = mysql_fetch_array($res)) {
$artist = $row[artist_name];
echo "$artist";
while ($row = mysql_fetch_array($res)) {
$credit = $row[credit_name];
echo "$credit";
}
echo "<br />";
}
这是我希望从上面的示例数据中实现的理想目标:
歌曲:游戏
致谢: Peter Mark(制片人、作家) 梅特·克里斯蒂安森(歌手)
【问题讨论】:
-
我认为您正在搜索
GROUP_CONCAT(..)。或者,循环遍历所有结果并将它们添加到数组中,然后用逗号将它们内爆。 -
谢谢你的回复,如果不是太麻烦你能给我一个简单的例子吗?作为新手,这些听起来像是很好的解决方案,但我可能需要几个月的时间来学习如何编写它们哈哈
标签: php mysql loops while-loop