2016-05-17 12 views
0
---------- ---------- ---------- ----------  
| t1  | | t2  | | t3  | | t4  | 
---------- ---------- ---------- ---------- 
| id  | | id  | | id  | | t1_id | 
| foo | | bar | | foobar | | t2_id | 
---------- ---------- ---------- | t3_id | 
             ---------- 

を設定し、私はテーブルのこのセットを持っており、この特定のクエリで:SELECT非DISTINCT結果をマージするクエリーのグループ化は/

SELECT fooという、バー、t4からfoobarに
LEFTがON t1に登録しようt1.id = t4.t1_id
LEFT t3.id = t4.t3_id ON T3をJOIN t2.id = t4.t2_id
左側にT2をJOIN。

私は、この特定の結果セットを思い付くことができます:

------------------------------  -------------------------------   
| foo | bar  | foobar | => | foo  | bar  | foobar | 
------------------------------  ------------------------------- 
| x  | y  | a  |  | x  | y  | a  | 
| x  | y  | b  |  |   |   | b  | 
| x  | y  | c  |  |   |   | c  | 
------------------------------  ------------------------------- 

質問は:どのように私は同様のエントリではなく、そうでないものと何とかグループこれらの列に私のクエリをフォーマットすることができますか?これはMySQLでも可能ですか?私はこれをPHPを通して出力していますので、PHPのフォーマットを処理させるべきですか?

これは、PHPで処理する必要がある場合は同じ質問です。

+0

あなたは、フォームでそれを受け取るために、 'GROUP_CONCAT(foobarに)foobar''、B、C 'に選択リスト 'foobar'に変更することができますbar'、FOOによってクエリ'グループの最後に言うならば – splash58

+0

私はあなたが最初のフェッチレコードの値を格納し、他のレコードと一致する場合は、印刷されていないか、他の賢明な表示を表示する場合は、PHP側のロジックと一緒に行くべきだと思う。 –

+0

MySQLで可能であっても、データの提示面はデータベースの責任であってはなりません。これにはPHPがはるかに適しています。 – apokryfos

答えて

1

PHPでフォーマットを処理させる必要があります。一般に、SQLの結果セット(およびテーブル)は、を順不同で表します。セットです。あなたの書式設定には特別な順序があります。それは、「リスト」として3番目の列で、1行の値を置くために役立つかもしれない

SELECT foo, bar, GROUP_CONCAT(foobar) as foobars 
FROM t4 LEFT JOIN 
    t1 
    ON t1.id = t4.t1_id LEFT JOIN 
    t2 
    ON t2.id = t4.t2_id LEFT JOIN 
    t3 
    ON t3.id = t4.t3_id 
GROUP BY foo, bar; 

前記、それは、MySQLにあなたがやりたい可能である(変数を使用してたとえば、)、PHPは書式設定を行うのに適しています。

+0

これ!私が望む期待どおりの結果を返しました。 – Valkyrurr

0
SELECT distinct foo, bar, foobar FROM t4 
LEFT JOIN t1 ON t1.id = t4.t1_id 
LEFT JOIN t2 ON t2.id = t4.t2_id 
LEFT JOIN t3 ON t3.id = t4.t3_id; 
関連する問題