Теги статей в одном поле

Рейтинг: 0Ответов: 1Опубликовано: 18.09.2014

Добрый день.
Есть таблицы Статьи, Теги и ТегиСтатей (id, idArticle, idTag).
Статья может иметь несколько тегов.
Как получить поля НазваниеСтатьи [Статья], Теги [ТегиСтатей join Теги]?
Но прикол в том, что я бы хотел в поле теги получить не один ответ, а сразу все для данной статьи, например, [машины, техника, железо], а ещё б лучше ещё и ссылку как-то прицепить, например, при нажатии чтоб выглядело mysite.com/tag/машина.

Ну или проще говоря, как вывести данные в формате [машины, техника, железо] в одной ячейке, если они в разных строках базы данных?
Подскажите, как такое реализовать.
Спасибо.

Ответы

▲ 2Принят
SELECT a.id, a.title, a.content, GROUP_CONCAT(t.name SEPARATOR ', ') AS tag_list
FROM articles AS a
LEFT JOIN relations AS r ON r.article = a.id
LEFT JOIN tags AS t ON r.tag = t.id
GROUP BY a.id;

fiddle

а ещё б лучше ещё и ссылку как-то прицепить, например при нажатии что б выглядело mysite.com/tag/машина

Плохая идея просто из-за того, что генерация URL происходит на стороне БД. Но - можно:

SELECT
    a.id, a.title, a.content,
    GROUP_CONCAT(
        CONCAT('<a href="/tag/', t.slug, '">', t.name, '</a>')
        SEPARATOR ', '
    ) AS tag_list
FROM articles AS a
LEFT JOIN relations AS r ON r.article = a.id
LEFT JOIN tags AS t ON r.tag = t.id
GROUP BY a.id;

fiddle

Да и вообще лучше сразу их списком получать для каждой записи.