我有一个带有2个表的mysql数据库:songideen,kommentare。在“songideen”中你可以存储歌曲,在“kommentare”你可以评论它们。两个表都通过LEFT JOIN链接。 如何合并行(如果一首歌有2个或更多的评论)所以所有评论都在一行中用','分隔?在这个例子中,我想组合第二行和第三行:
Name Arbeitstitel Datum mp3 ID Kommentare KommentarID
Lukas Titeltest 2016-06-06 Link 1 comment 1
Jannik Titeltest2 2016-07-06 Link2 2 comment2 2
Jannik Titeltest2 2016-07-06 Link2 2 comment3 2
Andi Titeltest3 2016-07-20 Link3 3 comment4 3
我alrady以这种方式尝试过,但它不起作用:
$sql = "SELECT songideen.Name, songideen.Arbeitstitel, songideen.Datum, songideen.mp3, songideen.ID, GROUP_CONCAT(kommentare.Kommentar SEPARATOR ',') AS KommentarIDs, kommentare.KommentarID
FROM songideen
LEFT JOIN kommentare
ON songideen.ID=kommentare.KommentarID
GROUP BY kommentare.KommentarID";
答案 0 :(得分:1)
您需要按songideen.ID
进行分组。由于songideen
表中有记录,kommentare
表中没有任何注释。
SELECT
songideen.Name,
songideen.Arbeitstitel,
songideen.Datum,
songideen.mp3,
songideen.ID,
GROUP_CONCAT(kommentare.Kommentar SEPARATOR ',') AS KommentarIDs,
kommentare.KommentarID
FROM songideen
LEFT JOIN kommentare ON songideen.ID = kommentare.KommentarID
GROUP BY songideen.ID ;
注意:
在您的情况下,您正在按kommentare.kommentarID
对结果集进行分组。对于songideen
表中没有kommentare
表中任何评论的记录,NULL
值kommentare.kommentarID
。因此,您的最终结果集将包含kommentare
表中具有相应注释的记录以及NULL
表中找到的所有kommentare
条目的一个条目。
答案 1 :(得分:0)
对您的输出使用以下查询。
$sql = "SELECT s.Name, s.Arbeitstitel, s.Datum, s.mp3, s.ID, GROUP_CONCAT(k.Kommentar SEPARATOR ',') AS KommentarIDs, k.KommentarID,(SELECT count(*) FROM kommentare where KommentarID= s.ID) as commentCount
FROM songideen s , kommentare k
where s.ID=k.KommentarID
GROUP BY k.KommentarID
having commentCount>2
";
说明:
这里我们使用内连接你不会得到任何重复。使用你可以限制数字评论
答案 2 :(得分:0)
SELECT
*
FROM songideen
LEFT JOIN (SELECT
GROUP_CONCAT (kommentare SEPARATOR ','), KommentarID
FROM kommentare
GROUP BY KommentarID) AS kommentare
ON kommentare.KommentarID = songideen.id
LEFT JOIN
在子查询上返回按kommentare
分组的连续KommentarID
。
但是,你应该重新设计你的表格设计,或者至少改变一些列的名称。
kommentare
。KommentarID
- 这似乎不是kommentare
的实际标识符,而是相应songideen
的ID。{{1所以这应该被称为id
所以你可以很容易地看到,这是建立表之间关系的列。
缺少"实际" KommentarID - songideenID
表中的primary key
是什么? kommentare
auto_increment
int
会非常直观地感受到。
然后它会看起来像这样:http://sqlfiddle.com/#!9/150e7/4
primary key