0

同じSQLステートメントで2つの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';

プレーヤーが以前の3つのクラブと1つのリンクを言った場合、次のように表示する代わりに:

名前:ジョン・スミス

以前のクラブ:アーセナル、レディング、QPR

リンク: www.bbc.co.uk

このように表示されます:

名前:ジョン・スミス

以前のクラブ:アーセナル、レディング、QPR

リンク: www.bbc.co.uk、www.bbc.co.uk、www.bbc.co.uk

さらに悪いことに、複数のリンクがある場合(以下では2つのリンクが使用されています)、次のようになります。

名前:ジョン・スミス

以前のクラブ:アーセナル、アーセナル、読書、読書、QPR、QPR

リンク: www.bbc.co.uk、www.football.com、www.bbc.co.uk、www.football.com、www.bbc.co.uk、www.football.com

誰かがここで何が起こっているのか、そしてそれを修正する方法についていくつかのガイダンスを提供できますか?

以前のクラブの最初のGROUP_CONCATはそれ自体で正常に機能しますが、リンクの2番目のGROUP_CONCATがミックスでスローされると、上記の問題が発生します。

お手数をおかけしますが、よろしくお願いいたします。

4

2 に答える 2

1

これが通常の動作です。リンクエントリは、ごとpreviousclubに複製され、その逆も同様です。代わりにこれを使用してください:

GROUP_CONCAT(DISTINCT link), GROUP_CONCAT(DISTINCT previousclubs.name)
于 2012-08-20T15:36:43.153 に答える
1

問題はGROUP_CONCATではなく、引数です。

2番目のグループの連結は次のようになります。

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 に答える