在MySql数据库中,我有三个表:channels
,channels_members
和users
,channels_members
与channels
channel_id
和channels
相关联{1}}已将users
与user_id
相关联。
在频道表中,我正在存储用户创建的频道,每个频道可以是is_auto
和is_admin
或is_user
,所有频道都会在{{1}上标记为1这意味着:所有用户自动加入,否则渠道成员是管理员或用户,现在我想做什么?
1:我希望获得is_auto
列等于1的所有频道而不考虑is_auto
表上的成员角色。
2:当channels_members
为1时,获取具有channels_members
表格特定成员角色的所有渠道,然后
3:在此频道is_admin
为{1}时,获取具有channels_members
表格特定成员角色的所有频道,例如:我有4个频道
is_user
表:
channels
id channel_name is_auto user_id
1 debian 1 1
2 ubuntu 0 1
3 mint 0 1
4 fedora 0 1
表:
channels_members
输出应该像这个结果
id user_id channel_id is_admin is_user
1 1 1 0 1
2 1 2 1 0
3 1 3 0 1
4 1 4 0 1
我的命令不会为此输出返回正确的结果
id channel_name is_auto user_id is_admin is_user
1 debian 1 1 0 1
2 ubuntu 0 1 1 0
3 mint 0 1 0 1
4 fedora 0 1 0 1
答案 0 :(得分:1)
通过调整channels_members
子句
channels
两次加入on
select c.*,
coalesce(m1.is_admin,0) is_admin,
coalesce(m2.is_user,0) is_user
from `channels` c
left join channels_members m1 on c.id = m1.channel_id and m1.is_admin =1
left join channels_members m2 on c.id = m2.channel_id and m2.is_user =1
/* join with users table */
where c.user_id = 1
order by c.id
答案 1 :(得分:0)
尝试下一个查询,希望它有帮助...
SELECT channels.channel_name,channels.is_auto, channels.user_id, channels_members.is_admin, channels_members.is_user FROM `channels`
INNER JOIN channels_members on channels.user_id = channels_members.user_id
GROUP By channels.id