2017-10-13 2 views
-1

動作しない参加: http://sqlfiddle.com/#!9/0cc41/1/0MYSQLは、左の条件は、私は私のこの問題の例を持っている

説明: 3つのテーブル(イベント、人やユーザ)があります。テーブルの人は、イベントとユーザーを接続します。 persons.type_idはevents.idで、persons.user_idはuser.idです。私は2つの出来事(id 1と2)を作りました。イベントごとに1つのエントリーがあります。

マイSQL:

SELECT events.*, 
coalesce(part_person.Accept_Participants_LJ, 0) AS Accept_Participants 
FROM events 
LEFT JOIN (
    SELECT GROUP_CONCAT(CONCAT(part_user.forname, ' ', part_user.surname) SEPARATOR ', ') AS Accept_Participants_LJ, 
    part_person.type_id 
    FROM persons AS part_person 
    LEFT JOIN user AS part_user ON part_user.id = part_person.user_id 
    WHERE part_person.type = 'event_participant' 
) part_person ON events.id = part_person.type_id 
GROUP BY events.id 

私の期待だった:あなたが見ることができるように

------------------------ 
|id|Accept_Participants| 
------------------------ 
|1 | Carl Habicht  | 
------------------------ 
|2 | Peter Zwegert  | 
------------------------ 

、結果は次のとおりです。

---------------------------------- 
|id| Accept_Participants   | 
---------------------------------- 
|1 | Carl Habicht, Peter Zwegert| 
---------------------------------- 
|2 | 0       | 
---------------------------------- 

彼は無視すること、思わON-左結合の条件。

しかし、私の間違いはどこですか?

答えて

1

GROUP_CONCATが(ほぼ)常にすべての凝集は有用ではありませんなしででグループやグループを持っている必要があり たぶん、これは何が必要です

SELECT events.*, 
coalesce(part_person.Accept_Participants_LJ, 0) AS Accept_Participants 
FROM events 
LEFT JOIN (
    SELECT GROUP_CONCAT(CONCAT(part_user.forname, ' ', part_user.surname) SEPARATOR ', ') AS Accept_Participants_LJ, 
    part_person.type_id 
    FROM persons AS part_person 
    LEFT JOIN user AS part_user ON part_user.id = part_person.user_id 
    WHERE part_person.type = 'event_participant' 
    group by part_person.type_id 
) part_person ON events.id = part_person.type_id 
order BY events.id 
関連する問題