MySql搜索列和联接列以查找文本,并按联接列的计数排序
是否可以在不使用UNION的情况下执行以下查询 为了简化,我有三个表“article”、“article_tag”和“tag” 如果有人搜索“orange”,我想查找标记为“orange”的文章,但也要查找标题中带有“orange”的文章。 我通过计算与查询文本匹配的标记数对结果进行排序 我现在就是这样做的:MySql搜索列和联接列以查找文本,并按联接列的计数排序,mysql,join,count,Mysql,Join,Count,是否可以在不使用UNION的情况下执行以下查询 为了简化,我有三个表“article”、“article_tag”和“tag” 如果有人搜索“orange”,我想查找标记为“orange”的文章,但也要查找标题中带有“orange”的文章。 我通过计算与查询文本匹配的标记数对结果进行排序 我现在就是这样做的: SELECT * FROM ( select article.*, count(tag.tag) AS tag_count FROM article, article_tag
SELECT *
FROM (
select article.*, count(tag.tag) AS tag_count
FROM article, article_tag, tag
WHERE article.article_id = article_tag.article_id AND
article_tag.tag_id = tag.tag_id AND
tag.tag like "%orange%"
GROUP BY article.article_id
UNION ALL
SELECT article.*, 0
FROM article
WHERE article.title LIKE "%orange%"
) as t
GROUP BY t.article_id
ORDER BY tag_count DESC
我这样问是因为我使用的ORM不适合工会 检查这是否解决了您的问题
SELECT *
FROM (
select article.*, count(tag.tag) AS tag_count
FROM article, article_tag, tag
WHERE article.article_id = article_tag.article_id AND
article_tag.tag_id = tag.tag_id AND
(tag.tag like "%orange%" OR article.title LIKE "%orange%")
)as t
GROUP BY t.article_id
ORDER BY tag_count DESC
这几乎奏效了。问题是,它不计算匹配“orange”的标记,而是计算所有标记,不管它们是否匹配orange,因为条件article.title(如“%orange%”)满足所有条件。为了清楚起见,我计算了与查询文本匹配的标记数(例如“橙色”),这样我就可以按相关性对结果进行排序,相关性最高的标记数最高。谢谢你。
SELECT *
FROM (
select article.*, count(tag.tag) AS tag_count
FROM article, article_tag, tag
WHERE article.article_id = article_tag.article_id AND
article_tag.tag_id = tag.tag_id AND
(tag.tag like "%orange%" OR article.title LIKE "%orange%")
)as t
GROUP BY t.article_id
ORDER BY tag_count DESC