SQL для получения тегов в таблице ссылок - PullRequest
1 голос
/ 13 февраля 2011

У меня есть запрос, который я сделал, чтобы вернуть все теги в наборе с тегами в объединенном списке, но я пытаюсь определить, как написать запрос, который будет возвращать те же результаты, но только для тех элементов с определенный тег .. список говорит по тегу, если хотите. По логике вещей, если я добавлю 'where tbl_tag.tag_id = 3', в нем будет отображен только этот конкретный тег в группе. Я хочу, чтобы он был в состоянии перечислить все из них. Возможно, ответом будет несколько запросов, но мне любопытно, можно ли это сделать с помощью одного.

SELECT tbl_talks.*,
       GROUP_CONCAT(tbl_tag.tag_name ORDER BY tbl_tag.tag_name) AS tags
FROM tbl_talks
    LEFT JOIN tbl_linking_talk_tag
        ON tbl_talks.talk_id = tbl_linking_talk_tag.talk_id
    LEFT JOIN tbl_tag
        ON tbl_linking_talk_tag.tag_id = tbl_tag.tag_id
GROUP BY tbl_talks.talk_id

1 Ответ

0 голосов
/ 13 февраля 2011

Быстрое, хакерское решение состоит в том, чтобы заключить весь запрос во внешний запрос и возвращать только записи, содержащие соответствующий тег, используя WHERE tags LIKE '%....%.Это хрупко, потому что всегда есть шанс, что у вас будет один тег (например, «ягода»), который является контейнером внутри другого (например, «клубника»).Есть способы обойти это, но они не очень красивы и не очень SQLish.

Немного более правильным (и одинаково непроверенным!) Решением было бы добавить исходный запрос в качестве подзапроса в предложении WHERE:

WHERE EXISTS
(
  SELECT
    1
  FROM
    tbl_talks
    LEFT JOIN tbl_linking_talk_tag
      ON tbl_talks.talk_id = tbl_linking_talk_tag.talk_id
    LEFT JOIN tbl_tag
      ON tbl_linking_talk_tag.tag_id = tbl_tag.tag_id
  WHERE
    tbl_tag.tag_id IN (the, tag_ids, you, want)
)

Возможно, в MySQL существует более простой встроенный способ сделать это, но я этого не знаю.

...