2016-06-22 11 views
3

これは私のテーブルの動物であるGROUP_CONCATとLEFT JOINを組み合わせるにはどうすればよいですか?これは私のテーブル名です</p> <pre><code>╔══════════╦══════╗ ║ animal ║ id ║ ╠══════════╬══════╣ ║ dog ║ 1 ║ ║ cat ║ 4 ║ ║ cat ║ 3 ║ ║ bird ║ 1 ║ ╚══════════╩══════╝ </code></pre> <p>:

╔═══════╦══════╗ 
║ id2 ║ name ║ 
╠═══════╬══════╣ 
║ 1 ║ alan ║ 
║ 2 ║ bob ║ 
║ 3 ║ john ║ 
║ 4 ║ sam ║ 
╚═══════╩══════╝ 

これは私の予想結果である:

$sql = ' 
    SELECT n.*, 
    x.grouped_name FROM names n 
    LEFT JOIN (SELECT a.id, 
    GROUP_CONCAT(a.animals) AS grouped_name FROM animals a GROUP BY a.id) x 
    ON x.id = n.id2'; 

    foreach ($pdo->query($sql) as $row) { 
      echo '<td>'.$row['animal'].' </td>'; 
      echo '<td>'.$row['grouped_name'].' </td>'; 
    } 
:私は、このソリューションを試してみました
╔══════════╦═════════════╗ 
║ dog ║ alan  ║ 
║ cat ║ sam,john ║ 
║ bird ║ alan  ║ 
╚══════════╩═════════════╝ 

しかし、私は結果を得ることはありません。

また、私はこのソリューションを試みた:

$sql = ' SELECT n.*, (SELECT GROUP_CONCAT(a.id) FROM animals a WHERE a.id = n.id2) AS grouped_name FROM names n'; 

をしかし、私の結果はこれです:

╔══════════╦═════════════╗ 
║   ║ 1,1   ║ 
║   ║ 3   ║ 
║   ║ 4   ║ 
╚══════════╩═════════════╝ 

答えて

4
SELECT t1.animal, GROUP_CONCAT(COALESCE(t2.name, "") separator ',') AS grouped_name 
FROM animals t1 
LEFT JOIN names t2 
    ON t1.id = t2.id2 
GROUP BY t1.animal 

動物がに一致しない場合の動作を確認するためにフィドルを見てくださいnamesの誰でもこのケースを処理するために、名前にCOALESCE()を使用して、グループ連結の前に空の文字列でNULLの値を置き換えます。

SQLFiddle

+0

を使用して、空白のページを取得することができます( '$ sqlを=「、GROUP_CONCATをt1.animalを選択します FROM animals t1 左ジョイント名t2 ON t1.id = t2.id2 GROUP BY t1.animal ';' – Jarla

+0

PHPスクリプトのエイリアスを確認してください期待している。クエリはMySQLで正常に動作します。 –

+0

'セパレータ'、 ''セパレータ ''や ''セパレータ '' '、 '' 'を使っていますが、まだ動作していませんでした – Jarla

1

こんにちは、私は私のPHPのページにあなたのコードをテストしようとしたこれらのクエリ

select a.animal,group_concat(n.name) as name from animals as a 
LEFT JOIN name as n ON n.id2 = a.id 
group by a.animal 
関連する問題

 関連する問題