ユーザーグループを格納する「group_names」テーブルがあります。各グループにはマネージャーがあり、個々のユーザーにすることも、別のグループによって管理することもできます。これは現在、group_names.mgr_typeによって決定されています。INT値1は、それが個々のユーザーであることを意味し、値2は、それを管理するグループであることを意味します。
たとえば、「一般ユーザー」グループは、「IT部門」グループまたは「JohnDoe」によって管理できます。usersおよびgroup_namesテーブルの一意のIDフィールドは、「user_id」および「group_id」です。
PHPからロジックを取り出して、SQLクエリに入れたいのですが、ここで問題が発生しています。テーブルのレイアウトを考えると、これが可能かどうか、またはドキュメントに記載されている簡単な手順に従うことができないかどうかはわかりません。
SELECT gn.group_id, gn.group_name, ... gn.mgr_id, CONCAT(usr.user_firstname,' ',usr.user_lastname) AS created_name, usr.user_id,
CASE gn.mgr_type
WHEN '1' THEN CONCAT(usr.user_firstname,' ',usr.user_lastname) WHERE usr.user_id=gn.mgr_id LIMIT 1
WHEN '2' THEN gn.group_name WHERE gn.group_id=gn.mgr_id LIMIT 1
END AS mgr_name
FROM group_names gn
LEFT JOIN users usr
ON gn.created_by=usr.user_id
ORDER BY group_name ASC;
括弧の有無にかかわらず、IFとCASEのさまざまなバリエーションを試しましたが、「無効な構文」エラーが発生し続けます。
...for the right syntax to use near 'WHERE usr.user_id=gn.mgr_id LIMIT 1) WHEN '2' THEN (gn.group_name WHERE gn' at line 3
同じテーブルから別の行を選択することもできますか(mgr_id = group_idに基づいて別の行からgroup_nameを選択します)、または別のテーブルを追加する必要がありますか?これを行うためのより簡単で効率的な方法に関する提案はありますか?
ありがとう!