gpt4 book ai didi

MySQL SELECT WHERE 在 IF 语句中

转载 作者:行者123 更新时间:2023-11-29 03:41:47 24 4
gpt4 key购买 nike

我有一个存储用户组的“group_names”表。每个组都有一个管理员,可以是个人用户,也可以由另一个组管理。这目前由 group_names.mgr_type 确定。 INT 值为 1 表示它是个人用户,值为 2 表示它是管理它的组。

例如,“一般用户”组可以由“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 从不同的行中选择 group_name),还是应该添加另一个表?关于更简单/更有效的方法有什么建议吗?

谢谢!

最佳答案

你试过这个吗,因为你已经加入了这些表

CASE gn.mgr_type
WHEN '1' THEN CONCAT(mgr_usr .user_firstname,' ',mgr_usr .user_lastname)
WHEN '2' THEN mgr_grp.group_name
END AS mgr_name

你实际上还需要 2 个左连接才能工作

LEFT JOIN users mgr_usr 
ON gn.mgr_id = mgr_usr.user_id
LEFT JOIN group_names mgr_grp
ON gn.mgr_id = mgr_grp.group_id

如果是用户,则左连接到user表以获取经理名称,如果是组,则连接到group_names表以检索组名

您可以进一步限制 JOIN

LEFT JOIN users mgr_usr 
ON gn.mgr_id = mgr_usr.user_id AND gn.mgr_type = 1
LEFT JOIN group_names mgr_grp
ON gn.mgr_id = mgr_grp.group_id AND gn.mgr_type = 2

关于MySQL SELECT WHERE 在 IF 语句中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13000287/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com