我试图在同一个SQL语句中使用两个GROUP_CONCAT。
我有以下代码:
try
{
$sql = 'SELECT player.id, player.name AS name, GROUP_CONCAT(previousclubs.name)
previousclubs, satscore, gpa, GROUP_CONCAT(link) link
FROM player INNER JOIN playerpreviousclubs
ON player.id = playerid
INNER JOIN previousclubs
ON previousclubid = previousclubs.id
INNER JOIN links
ON links.playerid = player.id
GROUP BY player.id';
$result = $pdo->query($sql);
}
catch (PDOException $e)
{
$error = 'Error fetching details: ' . $e->getMessage();
include 'error.html.php';
exit();
}
foreach ($result as $row)
{
$names[] = array(
'id' => $row['id'],
'name' => $row['name'],
'previousclubs' => $row['previousclubs'],
'links' => $row['link']
);
}
include 'profiles.html.php';
如果玩家说过三个以前的俱乐部和一个链接,那么就不要这样显示:
姓名: John Smith
以前的俱乐部:阿森纳,雷丁,QPR
链接: www.bbc.co.uk
它显示如下:
姓名: John Smith
以前的俱乐部:阿森纳,雷丁,QPR
链接: www.bbc.co.uk,www.bbc.co.uk,www.bbc.co.uk
如果你有多个链接(下面有两个链接),那么仍然很糟糕你得到了这个:
姓名: John Smith
以前的俱乐部:阿森纳,阿森纳,雷丁,阅读,QPR,QPR
链接: www.bbc.co.uk,www.football.com,www.bbc.co.uk,www.football.com,www.bbc.co.uk,www。 football.com
有人可以就这里发生的事情以及如何纠正提供一些指导。
previousclubs上的第一个GROUP_CONCAT本身可以正常工作,但当混合中第二个GROUP_CONCAT用于链接时,会出现上述问题。
感谢您的时间和帮助。
答案 0 :(得分:1)
这是正常行为。您的链接条目会因每个previousclub
而重复,反之亦然。请改用:
GROUP_CONCAT(DISTINCT link), GROUP_CONCAT(DISTINCT previousclubs.name)
答案 1 :(得分:1)
问题不在于GROUP_CONCAT,而是争论。
你的第二组小组应该是:
GROUP_CONCAT(distinct link) link
您还可以控制排序(例如,如果您想要最近的排序)。请查看http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat上的帮助页面。