对不起标题,我不知道还能放什么。
我希望在单个数据库查询中提取用户的所有信息。
共有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)
user
和user_services
我可以一起完成,因为它们各有一行,并由user.id链接。
user_languages
和user_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数组(超级凌乱)。
谢谢:)
答案 0 :(得分:1)
如果您向我们提供表的结构,我们可以为您提供更多帮助,但只要所有表共享一个外键,您就可以使用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;
}
*注意 - 代码样本未经测试,仅用于样本目的。