My goal is to return the admins list only if the requester's username is registered as admin / member in that channel.
I store the admins and members list in TABLE channel_member
.
CREATE TABLE channel_member (
id INTEGER NOT NULL,
uuid VARCHAR(255) NOT NULL,
user VARCHAR(255) NOT NULL,
role VARCHAR(255) NOT NULL, // '0' = admin, '1' = member
PRIMARY KEY (id)
);
What I've tried:
- This SELECT statement return multiple row regardless whether the
username
exists asadmin
ormember
.
@Select("SELECT user_detail.user, user_detail.name " +
"FROM user_detail " +
"JOIN channel_member ON user_detail.user=channel_member.user " +
"AND channel_member.uuid=#{channelUuid} AND channel_member.role='0'")
List<MemberModel> getChannelAdmins(String username, String channelUuid);
What I am thinking what the logic would look like but don't know how to write it into a SELECT statement:
- Get the TABLE
user_detail
- Get the TABLE
channel_member
- JOIN table
user_detail
andchannel_member
/ get intersection that:- channel_member.uuid=#{channelUuid}
- channel_member_role='0' // for admin.
- (I don't know how) return the result only if channel_member.user=#{username} found in one of the row.
TL:DR, I will post the data down below and the expected result
Table user_detail
id | user | name
1 | admin | admin client
2 | member | member client
3 | member-2 | member 2 client
4 | non-member | non member client
Table channel_member
id | uuid | user | role
1 | 1 | admin | 0
2 | 1 | member | 1
3 | 1 | member-2 | 1
4 | 2 | admin | 0
The query is (username, channelUuid)
e.g (member-2, 1)
to get the Admins list.
My expected result is
[
{
user: "admin",
name: "admin client",
},
]
Another query is (non-member, 1)
My expected result is
[]