【问题标题】:Join in search results加入搜索结果
【发布时间】:2011-10-14 22:40:48
【问题描述】:

这是我目前的查询:

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

唯一的问题,我不选择我不是成员的组。有趣的原因...我确实使用了“左外”连接。

【问题讨论】:

  • 是的,这是可能的,但我不明白你需要选择什么来写它......
  • 看起来你把事情搞混了。每个组只有一个描述和一个图像,但成员很多。你想展示什么? 所有成员,每行重复所有每组数据?
  • 在 where 子句中有 'group_members.user_id` = '33' 条件将过滤没有此 user_id 的结果。如果您想要 user_id = 33 是​​成员或不是成员的所有组,请从 where 子句中删除此条件。

标签: mysql sql search join


【解决方案1】:

如果我理解你,添加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

【讨论】:

    【解决方案2】:

    你需要添加

    INNER JOIN group_members
    ON group_members.group_id = groups.id
    

    之后

    FROM
        `groups`
    

    然后添加

    group_members.status
    

    您的选择

    【讨论】:

      【解决方案3】:

      如果您想要组,无论他们是否有任何 group_member,然后使用 LEFT OUTER JOIN,如下所示。如果您只想要那些具有 group_member(s) 的组,则将 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'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-27
        • 2014-08-03
        • 1970-01-01
        • 2020-12-26
        • 1970-01-01
        相关资源
        最近更新 更多