Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySql搜索列和联接列以查找文本,并按联接列的计数排序_Mysql_Join_Count - Fatal编程技术网

MySql搜索列和联接列以查找文本,并按联接列的计数排序

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

是否可以在不使用UNION的情况下执行以下查询

为了简化,我有三个表“article”、“article_tag”和“tag”

如果有人搜索“orange”,我想查找标记为“orange”的文章,但也要查找标题中带有“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%"
    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