这是我目前的查询:
SELECT
`groups`.`id`,
`groups`.`name`,
`groups`.`description`,
`groups`.`members`,
`groups`.`image`,
FROM
`groups`
WHERE
`groups`.`name` LIKE '%a%'
OR
`groups`.`description` LIKE '%b%'
所有工作都按预期工作,但我还需要一个额外的选择。问题是它存储在另一个表中,我对连接不太好。这是第二个表结构:
group_members
group_id
,user_id
,status
; 我需要为组选择指定的用户状态!可能吗?怎么样?
感谢您的建议!
修改
我需要在每个组中显示所有组和当前用户状态。
编辑#2:
可以说user_id
设置为33
。他将aa
键入为组名,在结果中,他会看到名称中包含aa
的所有组。此外,结果是他在每个小组中的地位。
ID Name Description Status
2 aa2 foobar 3
2 aa1 foobar 1
4 aa3 foobar
6 aa3 foobar
5 aa3 foobar 2
编辑#3:
这几乎是我需要的......
SELECT `groups`.`id`, `groups`.`name`, `groups`.`description`, `groups`.`members`, `groups`.`image`, `group_members`.`status`
FROM `groups`
LEFT JOIN `group_members`
ON (`group_members`.`group_id` = `groups`.`id`)
WHERE `group_members`.`user_id` = '33'
AND `groups`.`name` LIKE '%%'
OR `groups`.`description` LIKE '%%'
唯一的问题是,我没有选择我不是会员的团体。有趣的原因......我确实使用了“左外”加入。
答案 0 :(得分:0)
如果我理解你,很容易添加join,例如:
SELECT
`groups`.`id`,
`groups`.`name`,
`groups`.`description`,
`groups`.`members`,
`groups`.`image`,
FROM
`groups`
LEFT JOIN group_members
ON `groups`.`id` = group_members.group_id
WHERE
`groups`.`name` LIKE '%a%'
OR
`groups`.`description` LIKE '%b%'
AND group_members.status = xxx
答案 1 :(得分:0)
你需要添加
INNER JOIN group_members
ON group_members.group_id = groups.id
之后
FROM
`groups`
然后添加
group_members.status
到你的选择
答案 2 :(得分:0)
如果您想要群组而不管他们是否有任何group_member,请使用LEFT OUTER JOIN,如下所示。如果您只想要那些拥有group_member的组,那么将LEFT OUTER JOIN更改为INNER JOIN。
SELECT
`groups`.`id`,
`groups`.`name`,
`groups`.`description`,
`groups`.`members`,
`groups`.`image`,
group_members.status
FROM
`groups`
LEFT OUTER JOIN group_members
ON group_members.group_id = groups.group_id
WHERE
`groups`.`name` LIKE '%a%'
OR
`groups`.`description` LIKE '%b%'
AND status = 'something'