我需要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