CONCAT を使用するクエリで発生しているが、concat が null の場合でもグループを返す必要があるこの問題を解決する方法について、いくつかのトピックを検索しましたが、うまくいかない 2 つの解決策が見つかりました。
最初の解決策は、ISNULL を使用することでした。
#1582 - Incorrect parameter count in the call to native function 'ISNULL'
2 つ目は、部分的に機能する IFNULL を使用することでした。null ではないものを見つけますが、null のものは出力しません。
クエリは次のとおりです。
SELECT g.name, IFNULL(GROUP_CONCAT(c.name),'') AS commands
FROM site_access b
JOIN groups g ON b.group_id = g.id
JOIN group_commands gc ON g.id = gc.group_id
JOIN commands c ON gc.command_id = c.id
WHERE b.site_id = 1
GROUP BY g.name
ORDER BY g.status ASC
8 つの site_access、8 つのグループがあり、現在登録されており、グループ 1 とグループ 2 に割り当てられているコマンドは 2 つだけです。現在、これら 2 つのグループは出力されますが、コマンドがないため残りはすべて無視されます。
出力の例を次に示します。
Admin - add, del, announce
Member - find
望ましい出力:
Admin - add, del, announce
Member - find
Banned
OhterGroup1
OhterGroup2
OhterGroup3
OhterGroup4
OhterGroup5
テーブルに関する詳細情報が必要な場合は、そのサンプルがここにあり ます。