我一直在努力尝试为MySQL提供干净的HABTM查询
我有以下表格
id:1,name:test
user_id:1,group_id:1
user_id:1,group_id:2
id:1,name:default_group
id:2,name:another_group
我正拉着一个用户,在结果中我也希望得到这个小组。
问题是如何正确加入... 我是否执行左连接...或常规..我首先加入链接表然后在什么条件下? 接下来是什么?
谢谢,如果您需要更多信息,请告诉我。
我的开始......
“SELECT * FROM auth_users
AS User
LEFT JOIN auth_groups_users
ON(auth_groups_users
。user_id
= User
。id
)
LEFT JOIN auth_groups
AS Group
ON(Group
。id
= auth_groups_users
。group_id
)
在User
。id
='1';“
这是正确的吗?
然后我还想将组分组到用户自己的结果中......不是同一个用户的多个结果......
所以我希望我的结果是:
array(
'id' => 1,
'name' => 'test',
'Groups' => array(
0 => array(
'id' => 1,
'name' => 'default_group'
),
1 => array(
'id' => 2,
'name' => 'another_group'
)
)
)
答案 0 :(得分:2)
忘记HABTM,这些学术事物在现实生活中应用是一种垃圾,尽管你可能需要在将来(或者现在)回答这个问题。
所以让我澄清一点,你有这些表
users group_users groups
----- ----------- ------
id user_id id
name group_id name
所以基本上你要做的就是选择用户并将他们的组列在他们身上,我是对的吗?
所以正确的查询将是
SELECT users.name, groups.name
FROM users
INNER JOIN groups_users ON users.id = group_users.user_id
INNER JOIN groups ON groups.id = group_users.group_id
然而,这只列出拥有一个组的用户,如果你想选择那些没有的用户,你应该执行一个左连接而不是一个内连接(第一个)。
由于数据库总是会返回一组行,所以我无法想到获得所需内容的直接方法。你有两种方法可以实现你想要的目标