是否可以在没有UNION的情况下进行以下查询?
为了简化,我有三个表“article”,“article_tag”和“tag”。
article: { article_id, title, content }
article_tag: { tag_id, article_id }
tag: { tag_id, 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
我问这个是因为我使用的是不适合UNION的ORM。
答案 0 :(得分:0)
检查这是否解决了您的问题
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