0

我试图在同一个 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';

如果玩家说三个以前的俱乐部和一个链接,那么不要像这样显示:

姓名:约翰·史密斯

以前的俱乐部:阿森纳、雷丁、QPR

链接: www.bbc.co.uk

它显示如下:

姓名:约翰·史密斯

以前的俱乐部:阿森纳、雷丁、QPR

链接: www.bbc.co.uk、www.bbc.co.uk、www.bbc.co.uk

更糟糕的是,如果您有多个链接(下面使用了两个链接),您会得到:

姓名:约翰·史密斯

以前的俱乐部:阿森纳、阿森纳、雷丁、雷丁、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 混合使用时,就会出现上述问题。

感谢您的时间和帮助。

4

2 回答 2

1

问题不在于 GROUP_CONCAT,而在于参数。

您的第二组 concat 应该是:

GROUP_CONCAT(distinct link) link 

您还可以控制排序(例如,如果您想要最近的优先)。查看http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat的帮助页面。

于 2012-08-20T15:37:24.880 回答
1

这是正常的行为。您的链接条目会为每个 重复previousclub,反之亦然。改用这个:

GROUP_CONCAT(DISTINCT link), GROUP_CONCAT(DISTINCT previousclubs.name)
于 2012-08-20T15:36:43.153 回答