匹配文章标题与另一个表中列出的标签



我需要MySQL中的查询,该查询可以在一个表中列出一个表格中的tag_names,其中包含Artend_title列中的另一个表格

标签表-----------------tag_id tag_name-------------------1旅行2张门票3业务4美国
文章表----------------------------Article_id Article_title----------------------------美国1次旅行提示2张最喜欢目的地的便宜门票3美国商务舱门票的价格
预期输出-------------------atration_id tag_id tag_name---------------------------------------------------------------------------------------1 1旅行1 4美国2 2票3 3业务3 2票3 4美国

查询应如下:

SELECT a.article_id, t.tag_id, t.tag_name 
FROM article a
JOIN tags t
ON a.article_title LIKE CONCAT('%', t.tag_name, '%')
ORDER BY a.article_id;

但是,如果要用 space 将标签标记,则应用

替换查询的第4行

ON a.article_title LIKE CONCAT('% ', t.tag_name, ' %')

这不会在标题中考虑

中的标签 America

美国梦是美国的民族精神

按下以下两个表:

SELECT article_id, tag_id, tag_name
FROM tags as t 
LEFT JOIN articles as a
ON t.tag_name LIKE concat('%',a.article_title,'%')

做到这一点的最佳方法是拥有一个将标签和文章ID的第三个表。

tags table
------------
tag_id  tag_name
--------------
1      travel
2      tickets
3      business
4      america
article table
-------------
article_id  article_title
---------   --------------
1           travel tips to america
2           cheap tickets for favorite destinations
3           prices for business class tickets to america
article_tags table
------------
at_id tag_id  article_id
--------------
1      1      1
2      4      1
3      2      2
4      3      2

这样,您可以为所有文章和所有标签维护一个表

所以,如果您想抓住Article_id 1

的所有标签
SELECT at.id, t.tag_id, t.tag_name FROM article_tags at
INNER JOIN articles a ON (a.article_id = at.article_id)
INNER JOIN tags t ON (at.tag_id = t.tag_id)
WHERE at.article_id = 1

查询应输出,

at_id    tag_id   tag_name
1        1        travel
2        4        america   

或者,您可能需要抓住特定标签的所有文章,例如"票证"

SELECT a.article_name FROM article_tags at
INNER JOIN articles a ON (at.article_id = a.article_id)
INNER JOIN tags t ON (at.tag_id = t.tag_id)
WHERE t.tag_name = 'tickets'

应该输出:

article_name
---------------
cheap tickets for favorite destinations
prices for business class tickets to america

相关内容

  • 没有找到相关文章

最新更新