加入搜索结果

时间:2011-07-28 08:56:56

标签: mysql sql search join

这是我目前的查询:

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 '%%'

唯一的问题是,我没有选择我不是会员的团体。有趣的原因......我确实使用了“左外”加入。

3 个答案:

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