Присоединиться к результатам поиска - PullRequest
1 голос
/ 28 июля 2011

На данный момент у меня есть запрос:

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;

Мне нужно выбрать указанный статус пользователя для группы! Является ли это возможным? Как?

Спасибо за совет!

Edit:

Мне нужно отобразить все группы и текущий статус пользователя в каждой из этих групп.

Редактировать # 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 '%%'

Единственная проблема, я не выбираю группы, в которых я не являюсь членом. Интересно, почему ... Я использовал 'left external' join.

Ответы [ 3 ]

0 голосов
/ 28 июля 2011

нужно добавить

INNER JOIN group_members
ON group_members.group_id = groups.id

после

FROM
    `groups`

и затем добавьте

group_members.status

на ваш выбор

0 голосов
/ 28 июля 2011

Если вы хотите группы независимо от того, есть ли у них group_member или нет, используйте левое внешнее соединение, как показано ниже.Если вы хотите, чтобы только те группы, которые имеют 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'
0 голосов
/ 28 июля 2011

если я вас понимаю, очень просто добавить объединение , например:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...