gpt4 book ai didi

php - mySQL select query,通过一些逻辑从多个表中获取数据

转载 作者:行者123 更新时间:2023-11-29 04:25:43 25 4
gpt4 key购买 nike

我有两个表 users 和 *activation_details*

用户表有这些数据。 uid 是主键。

uid     |    user_name
______________________
1 | John Smith
2 | Mary Smith
3 | Nancy Smith
4 | Agent Smith

activation_details 有这些数据

aid     |    is_activated   |  user_id
______________________________________
1 | 0 | 0
2 | 1 | 4
3 | 1 | 1
4 | 1 | 777

请注意,用户 ID 777 不在用户表中。

我需要这种格式的结果

aid     |    is_activated   |  user_name      
______________________________________________
1 | 0 | 0
2 | 1 | Agent Smith
3 | 1 | John Smith
4 | 1 | 777

如果用户 ID 存在于用户表中,则必须显示用户名,否则必须显示 user_id 本身。

我试过这样的事情

SELECT aid, is_activated, user_id, users.user_name from activation_details, users WHERE users.uid = user_id

它给出了这个没有用的输出。

aid     |    is_activated   |  user_name      | user_id
________________________________________________________
2 | 1 | Agent Smith | 4
3 | 1 | John Smith | 1

是否可以只使用 mysql 获得此输出,我可以在 PHP 中使用多个查询来完成,但这不是我想要的。

aid     |    is_activated   |  user_name
______________________________________
1 | 0 | 0
2 | 1 | Agent Smith
3 | 1 | John Smith
4 | 1 | 777

最佳答案

您想将外部联接与 coalesce() 函数(返回所选列中的第一个非空值)结合使用,如下所示:

SELECT 
a.aid,
a.is_activated,
a.user_id,
coalesce(b.user_name, a.user_id, 0) as User
from
activation_details a
left outer join users b
on a.user_id=b.uid

编辑:我为 coalesce() 函数添加了一个检查,如果 user_name 都为用户返回一个 0user_id 字段为空值。

在 mysql 中完成的测试:

mysql> select * from first
-> ;
+------+-------+
| id | title |
+------+-------+
| 1 | aaaa |
| 2 | bbbb |
| 3 | cccc |
+------+-------+
3 rows in set (0.00 sec)

mysql> select coalesce('a', id) from first
-> ;
+-------------------+
| coalesce('a', id) |
+-------------------+
| a |
| a |
| a |
+-------------------+
3 rows in set (0.00 sec)

mysql> select coalesce('a', 1) from first;
+------------------+
| coalesce('a', 1) |
+------------------+
| a |
| a |
| a |
+------------------+
3 rows in set (0.00 sec)

mysql> select coalesce(null, 1) from first;
+-------------------+
| coalesce(null, 1) |
+-------------------+
| 1 |
| 1 |
| 1 |
+-------------------+
3 rows in set (0.00 sec)

关于php - mySQL select query,通过一些逻辑从多个表中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12055798/

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