table_mi にもインデックスがある table_m からすべての行をフェッチしようとしていますが、結果として 2 つの行を取得することを期待しています (m.id=3 および m.id=9) - しかし、GROUP_CONCAT を追加すると私の選択では、1行しか返されません。私はそれらの結合のどこかで事故を起こしていますか?
クエリ:
SELECT
m.id,
m.name,
m.keyword,
IFNULL(GROUP_CONCAT(r.keyword),'TEST') AS restrictions
FROM
table_m AS m
INNER JOIN
table_mi as mi ON m.id=mi.m_id
LEFT JOIN
table_ri as ri ON m.id=ri.m_id
LEFT JOIN
table_r AS r ON ri.r_id=r.id
WHERE
(
m.id>0
AND m.active=1
AND mi.p_id=0
AND (mi.pa_id="11" OR (mi.pa_id=0 AND mi.id!=0))
AND mi.u_id=IF((SELECT id FROM table_mi WHERE p_id=0 AND pa_id="11" AND u_id="2")>0,"2",0)
) OR mi.id=0
ORDER BY
mi.priority;
これは私が結果として得ているものです:
ID NAME キーワードの制限 9 test_a key_ar_key_2,r_key_3,r_key_4
これは私が期待しているものです:
ID NAME キーワードの制限 9 test_a key_ar_key_2,r_key_3,r_key_4 3 test_b キー_b テスト
SQLフィドルのスキーマを使用した私の完全な例をご覧ください: http://sqlfiddle.com/#!2/359d9/1