2016-08-15 9 views
1

を使用して参加する:データベース内でこれらの情報によってMySQLの重複値の私は、このスキーマがあるとしましょうGROUP_CONCAT

_________        _________ 
| Table 1 |        | Table 2 | 
|---------|   _______ ________|---------| 
| id_a |___  | link1 | |  | id_b | 
| name | |  |-------| |  | info | 
|_________| |_____| id_a |___|  | data | 
    |    | id_b |   |_________| 
    |    |_______| 
    | 
    |    _______ 
    |______________| link2 |_______ 
        |-------|  | 
        | id_a |  | _________ 
        | id_c |  |__| Table 3 | 
        |_______|   |---------| 
             | id_c | 
             | email | 
             |_________| 

表1

_____________ 
| id_a | name | 
|------|------| 
| 1 | foo | 
|______|______| 

表2

_____________________ 
| id_b | info | data | 
|------|------|-------| 
| 1 | bar | corge | 
| 2 | kux | corge | 
| 3 | fred | quux | 
|______|______|_______| 

表3

_________________ 
| id_c | email | 
|------|----------| 
| 1 | [email protected] | 
| 2 | [email protected] | 
| 3 | [email protected] | 
| 4 | [email protected] | 
| 5 | [email protected] | 
|______|__________| 

リンク1

_____________ 
| id_a | id_b | 
|------|------| 
| 1 | 1 | 
| 1 | 2 | 
| 1 | 3 | 
|______|______| 

リンク2

_____________ 
| id_a | id_c | 
|------|------| 
| 1 | 1 | 
| 1 | 2 | 
| 1 | 3 | 
| 1 | 4 | 
| 1 | 5 | 
|______|______| 

私は私が望む件のデータを取得しようとすると、私は、この構文を使用する:

SELECT t1.*, 
     GROUP_CONCAT(DISTINCT t2.info SEPARATOR '|') AS info, 
     GROUP_CONCAT(DISTINCT t2.data SEPARATOR '|') AS data, 
     GROUP_CONCAT(DISTINCT t3.email SEPARATOR '|') AS email 
FROM table1 AS t1 
LEFT JOIN link1 AS l1 
ON l1.id_a = t1.id_a 
LEFT JOIN table2 AS t2 
ON t2.id_b = l1.id_b 
LEFT JOIN link2 AS l2 
ON l2.id_a = t1.id_a 
LEFT JOIN table3 AS t3 
ON t3.id_c = l2.id_c 
WHERE t1.id_a = ? 
GROUP BY t1.id_a 

問題は、私は(「表2」/「データ」の例)カラムに2つの以上の同じ値を有する場合結果は同じ番号を付与dosn'tことです

array(
    'id_a' => '1', 
    'info' => 'bar|kux|fred', 
    'data' => 'corge|quux', 
    'email' => '[email protected]|[email protected]|[email protected]|[email protected]|[email protected]' 
) 

そして、私は単一の出力(例えばバーCorge、Kux Corge、フレッドQuux)として、後に私のコードでそれらを使用するために正確に同じ数であるように連結された値を必要とするよう、:連結された値の私は要求に直接期待しているので、それを得ることが可能かどうかを知りたいですか?

答えて

0

私は自分自身に答えます。私が探していたのはCONCAT_WSです。私の要求はその後になります

SELECT t1.*, 
     GROUP_CONCAT(DISTINCT CONCAT_WS(
      ' ', t2.info, t2.data 
     ) SEPARATOR ', ') AS info, 
     GROUP_CONCAT(DISTINCT t3.email SEPARATOR '|') AS email 
FROM table1 AS t1 
LEFT JOIN link1 AS l1 
ON l1.id_a = t1.id_a 
LEFT JOIN table2 AS t2 
ON t2.id_b = l1.id_b 
LEFT JOIN link2 AS l2 
ON l2.id_a = t1.id_a 
LEFT JOIN table3 AS t3 
ON t3.id_c = l2.id_c 
WHERE t1.id_a = ? 
GROUP BY t1.id_a 
関連する問題