gpt4 book ai didi

php - SQL - 从多个表(一对多)中提取有关用户的所有信息

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

抱歉这个标题,我不知道还能写什么。

我希望在单个数据库查询中提取有关用户的所有信息。

有 4 个表:

user  
- userid (PK)
services
- serviceid (PK)
languages
- langid (PK)
areas
- areaid (PK)
user_services
- user_services_id (PK)
- serviceid (FK)
- userid (FK)
user_languages
- user_lang_id (PK)
- langid (FK)
- userid (FK)
user_areas
- user_area_id (PK)
- areaid (FK)
- userid (FK)

useruser_services 我都可以很好地组合在一起,因为它们各有一行并由 user.id 链接。

user_languagesuser_areas 表是一对多表,看起来类似于:

user_lang_id  |  userid  |  langid
1 | 5 | 2
2 | 5 | 6
3 | 5 | 18

user_area_id | userid | areaid
1 | 5 | 15
2 | 5 | 4
3 | 5 | 13

我希望数组看起来像这样:

Array
(
[id] => 5
[firstname] => lethal
[surname] => Mango
[gender] => male
...
[langid] => 2
[langid] => 6
[langid] => 18
...
[areaid] => London
[areaid] => Birmingham
[areaid] => Manchester
}

我尝试了 SQL JOIN 的组合,但效果似乎并不明显。我的最后一招是执行 3 个单独的查询,并在最后将 PHP 数组连接在一起( super 困惑)。

谢谢:)

最佳答案

如果您向我们提供表的结构,我们可以为您提供更多帮助,但只要您的所有表彼此共享一个外键,您就可以使用 JOIN 来实现这一点。它不必是相同的关键字段(例如 user_id),但这确实使其更加简单。通过连接,你应该有这样的东西:

select * from user
left join user_services on user_services.id = user.id
left join user_languages on user.id = user_languages.id
left join user_areas on user.id = user_areas.id

这将为您提供一个包含所有所需列的虚拟表。然后,您可以使用这些列创建一个数组,其中包含您需要的数据,如下所示:

foreach($query_result as $field => $value) {
$user[$field] = $value;
}

*注意 - 代码示例未经测试,仅用于示例目的。

关于php - SQL - 从多个表(一对多)中提取有关用户的所有信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5953576/

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