MySql搜索列和已加入的列,用于按连接的列数计算文本和顺序

时间:2012-03-21 03:36:49

标签: mysql join count

是否可以在没有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。

1 个答案:

答案 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