PHP MySQL 将 GROUP_CONCAT 结果视为单独的项目
PHP MySQL Treat GROUP_CONCAT results as separate items
我正在使用 PHP 和 MySQL 制作音乐分类数据库。
我有三个表:
歌曲:
ID | Title
------------------------
1 | Example Song
类型:
ID | Name
------------------------
1 | Classical
2 | Instrumental
歌曲类型
SongID | GenreID
----------------
1 | 1
1 | 2
我的查询是:
SELECT s.title, GROUP_CONCAT(DISTINCT g.name SEPARATOR ', ')
FROM song s
LEFT JOIN songgenre sg ON s.id=sg.s_id
LEFT JOIN genre g ON sg.genreid = g.id
我正在使用 GROUP_CONCAT 以允许多种类型,如图所示:
Title: "Example Song" Genres: Classical, Instrumental
我希望为每个流派在 PHP 中生成一个 link,这样如果用户点击 "Classical",他们将被带到更多列为古典的歌曲。问题是,我不确定如何给每个类型赋予它自己的 link。 GROUP_CONCAT 的问题是两种类型在同一行中一起返回,我不确定如何 拆分行以向每个单独的类型添加 link。
不要在数据库层内分组—return 未分组(但已排序)记录集到 PHP 并从那里处理它:
$qry = $pdo->query('
SELECT sg.SongID, sg.GenreID, s.Title, g.Name
FROM song s
LEFT JOIN songgenre sg ON s.ID = sg.SongID
LEFT JOIN genre g ON sg.GenreID = g.ID
ORDER BY sg.SongID, sg.GenreID
');
if ($qry) {
echo '<ul class="songs">';
$row = $qry->fetch();
while ($row) {
$current_song = $row['SongID'];
echo '<li>'
, '<span class="title">', htmlentities($row['Title']), '</span>'
, '<ul class="genres">';
do {
echo '<li>'
, '<a href="genre.php?id=', intval($row['GenreID']), '">'
, htmlentities($row['Name'])
, '</a>'
, '</li>';
} while ($row = $qry->fetch() and $row['SongID'] == $current_song);
echo '</ul>'
, '</li>';
}
echo '</ul>';
}
OP
要求的一个非常基本的例子
$var="Classical, Instrumental";
$each=explode(', ',$var);
foreach($each as $v){
echo '<a href="search.php?genre='.$v.'">'.$v.'</a>';
}
我正在使用 PHP 和 MySQL 制作音乐分类数据库。 我有三个表:
歌曲:
ID | Title
------------------------
1 | Example Song
类型:
ID | Name
------------------------
1 | Classical
2 | Instrumental
歌曲类型
SongID | GenreID
----------------
1 | 1
1 | 2
我的查询是:
SELECT s.title, GROUP_CONCAT(DISTINCT g.name SEPARATOR ', ')
FROM song s
LEFT JOIN songgenre sg ON s.id=sg.s_id
LEFT JOIN genre g ON sg.genreid = g.id
我正在使用 GROUP_CONCAT 以允许多种类型,如图所示:
Title: "Example Song" Genres: Classical, Instrumental
我希望为每个流派在 PHP 中生成一个 link,这样如果用户点击 "Classical",他们将被带到更多列为古典的歌曲。问题是,我不确定如何给每个类型赋予它自己的 link。 GROUP_CONCAT 的问题是两种类型在同一行中一起返回,我不确定如何 拆分行以向每个单独的类型添加 link。
不要在数据库层内分组—return 未分组(但已排序)记录集到 PHP 并从那里处理它:
$qry = $pdo->query('
SELECT sg.SongID, sg.GenreID, s.Title, g.Name
FROM song s
LEFT JOIN songgenre sg ON s.ID = sg.SongID
LEFT JOIN genre g ON sg.GenreID = g.ID
ORDER BY sg.SongID, sg.GenreID
');
if ($qry) {
echo '<ul class="songs">';
$row = $qry->fetch();
while ($row) {
$current_song = $row['SongID'];
echo '<li>'
, '<span class="title">', htmlentities($row['Title']), '</span>'
, '<ul class="genres">';
do {
echo '<li>'
, '<a href="genre.php?id=', intval($row['GenreID']), '">'
, htmlentities($row['Name'])
, '</a>'
, '</li>';
} while ($row = $qry->fetch() and $row['SongID'] == $current_song);
echo '</ul>'
, '</li>';
}
echo '</ul>';
}
OP
要求的一个非常基本的例子
$var="Classical, Instrumental";
$each=explode(', ',$var);
foreach($each as $v){
echo '<a href="search.php?genre='.$v.'">'.$v.'</a>';
}