MySql从单个sql命令获得不同的输出

时间:2017-09-23 09:48:44

标签: mysql

在MySql数据库中,我有三个表:channelschannels_membersuserschannels_memberschannels channel_idchannels相关联{1}}已将usersuser_id相关联。

在频道表中,我正在存储用户创建的频道,每个频道可以是is_autois_adminis_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

2 个答案:

答案 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

DEMO

答案 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