我有一个存储用户组的“group_names”表。每个小组都有一个经理,可以是个人用户,也可以由其他小组管理。这当前由group_names.mgr_type确定。 INT值为1表示它是个人用户,值为2表示它是一个管理它的组。MySQL在IF语句内选择
例如,“一般用户”组可由“IT部门”组或“John Doe”管理。 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的组名),或者我应该添加另一个表? 有关更简单/更有效的方法来提供任何建议吗?
谢谢!
感谢您的快速回复,此解决方案似乎工作得最好。 – Curtis