Это просто пример дизайна таблиц, используемого в моей системе тегов.
ARTICLES
id
content
TAGS
id
tag
TAGSTOARTICLES
articleid
tagid
@ edit Наконец, после некоторого rubberducking Мне удалось написать следующеезапросы:
Просто выберите статьи:
SELECT a.id, a.content, GROUP_CONCAT(t.tag) AS tags
FROM articles a
LEFT JOIN tagstoarticles tta ON tta.articleid = a.id
LEFT JOIN tags t ON t.id = tta.tagid
GROUP BY a.id
Результат:
id content GROUP_CONCAT(t.tag)
1 Lorem ipsum 1 tag1,tag2
2 Lorem ipsum 2 tag1
3 Lorem ipsum 3 tag2
Поиск по тегам:
SELECT a.id, a.content, GROUP_CONCAT(t.tag) AS tags
FROM articles a
LEFT JOIN tagstoarticles tta ON tta.articleid = a.id
LEFT JOIN tags t ON t.id = tta.tagid
WHERE a.id IN (SELECT A.id FROM tagstoarticles M, articles A, tags T
WHERE M.tagid = T.id
AND (T.tag IN ('tag1'))
AND A.id = M.articleid
GROUP BY A.id
HAVING COUNT( A.id )=1
)
GROUP BY a.id
Результат:
id content GROUP_CONCAT(t.tag)
1 Lorem ipsum 1 tag1,tag2
2 Lorem ipsum 2 tag1
Но запрос, используемый для поиска тегов, - беспорядок, есть идеи, чтобы решить эту проблему проще?