Как показать всю группу, когда достаточно одного матча - PullRequest
0 голосов
/ 12 декабря 2011

Название плохое, надеюсь, пример прояснит это.
У меня есть событие.Событие имеет теги.
(Упрощенно) Я показываю событие так:

SELECT 
      *.event,
      GROUP_CONCAT(tag.name)
FROM event
JOIN tag
ON event.tag_id = tag.id
GROUP BY event.id

Скажем, я хочу отфильтровать его и получить только те события, которые имеют tag.id = 2
Но все же показываютвсе событие, со всеми его тегами.

SELECT 
      *.event,
      GROUP_CONCAT(tag.name)
FROM event
JOIN tag
ON event.tag_id = tag.id
WHERE tag.id = 2
GROUP BY event.id

Это не сработает, так как будет правильно показывать детали события, но только тег с номером 2

Я почти уверен, что упустил что-то очень простое,что это ?: -)

Решения, которые мне известны:

  1. Получить теги позже, после того, как я загрузил детали события.
  2. Использовать внутренний запрос вместоGROUP_CONCAT(tag.name) для извлечения текущих тегов событий

Оба мне кажутся "не чистыми".

1 Ответ

1 голос
/ 12 декабря 2011
SELECT 
      event.*,
      GROUP_CONCAT(tag.name)
FROM event
  JOIN tag
    ON  event.tag_id = tag.id
  JOIN event AS event2
    ON  event2.id = event.id
    AND event2.tag_id = 2
GROUP BY event.id

или

SELECT 
      event.*,
      GROUP_CONCAT(tag.name)
FROM event
  JOIN tag
    ON  event.tag_id = tag.id
WHERE EXISTS
      ( SELECT *
        FROM event AS event2
        WHERE event2.id = event.id
          AND event2.tag_id = 2
      )
GROUP BY event.id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...