0

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

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

1
  • @Роман Ракзин, чтобы оформить простой перевод строки, надо отбить два пробела перед единственным переводом строки, для разрыва абзацев надо отбить два и более перевода строки, вот так: простой разрыв<пробел><пробел><перевод> простой разрыв разрыв абзацев<перевод> <перевод> [от одного до скольки угодно раз] разрыв абзацев Не надо запихивать текст в код. Текст - это не код.
    – etki
    18 сен 2014 в 19:55

1 ответ 1

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

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

1
  • Огромное спасибо. 19 сен 2014 в 8:42

Ваш ответ

By clicking “Отправить ответ”, you agree to our terms of service and acknowledge you have read our privacy policy.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками или задайте свой вопрос.