Php 从多个表中选择多行

Php 从多个表中选择多行,php,mysql,Php,Mysql,我有以下表格结构: - table users - user_id user_name - table groups - group_id group_name - table group_members - group_id user_id 也就是说,我在数据库中有: users: 1:administrator groups: 1:administrators 2:superusers 3:normal users group_members: 1:1 (user_id 1 is

我有以下表格结构:

- table users -
user_id
user_name

- table groups -
group_id
group_name

- table group_members -
group_id
user_id
也就是说,我在数据库中有:

users:
1:administrator

groups:
1:administrators
2:superusers
3:normal users

group_members:
1:1 (user_id 1 is member of group_id 1)
1:2
1:3

现在,我如何高效地选择所有用户,以及他们所属的组?我是否必须执行3个查询,从所有3个表中选择所有行,并用PHP中的数组获取它,或者是否有更有效的方法来实现这一点?

如果group和group_members表中没有空字段,则此查询应能工作

select u.*, g.group_name
from users u
inner join group_members gm on gm.user_id = u.user_id
inner join groups g on g.group_id = gm.group_id
where u.user_id = 123
如果有空字段,则将内部联接替换为左联接

select users.username, group.group_name
from users  
inner join group_members on group_members.user_id = users.user_id
inner join groups  on group.group_id = group_members.group_id

这只显示了一个用户,如果我删除where并修复了拼写错误,它只显示他们所属的第一个组,而我希望获得他们所属的所有组。查询看起来是正确的。我认为你有错误的数据。您指定的表group_成员具有group_id,然后是user_id。因此,根据您提供的数据,表示group 1具有三个用户1、2和3。检查组成员表内容,确保1、2、3在“组”列中,而不是在“用户”列中。此外,此查询仅列出在表组_成员中至少有一个关系的用户。如果您想要所有用户,包括那些没有组的用户,请在查询中的两个位置将单词“inner”替换为单词“left”。