如何通过标签名称获取相关文章?

时间:2014-01-14 22:39:02

标签: mysql database

我有两个表,一个与n:1关系连接到第一个表。

我正在尝试通过发布文章时插入的标记名称来检索相关文章。

我的表结构如下:

articles

id  |  article_title  | article_content
----+-----------------+----------------
 1  |   title one     | info goes here
 2  |   title two     | info goes here
 3  |   title three   | info goes here

article_tags

tag_id |  article_id  | tag_name
-------+--------------+----------------
   1   |     1        | health
   2   |     1        | information
   3   |     2        | how-to
   4   |     3        | how-to
   5   |     3        | health
   6   |     3        | network
   7   |     1        | network

我无法弄清楚如何通过这些tag_names获取相关文章。

article_id 1有health,第3条也有共同之处。

article_id 2有how-to,第3条也有共同之处。

我尝试过以下操作,但它与标签名称没有关系,因为我无法弄清楚如何连接tag_names ..

SELECT *
FROM articles 
LEFT JOIN article_tags ON articles.article_uid = article_tags.article_id
LIMIT 4

1 个答案:

答案 0 :(得分:3)

SELECT a1.id, GROUP_CONCAT(DISTINCT a2.id) AS related_articles
FROM articles AS a1
JOIN article_tags AS t1 ON a1.id = t1.article_id
JOIN article_tags AS t2 ON t2.tag_name = t1.tag_name AND t2.article_id != t1.article_id
JOIN articles AS a2 ON a2.id = t2.article_id
GROUP BY a1.id

DEMO