仅限相关结果-MYSQL


Limit to only relevant results - MYSQL

选择rideid、年份、型号、评级、SUM(相关性)作为SearchRelevance来自(从汽车中选择rideid、年份、型号、评级、1作为相关性WHERE cat LIKE"%$关键字%"联合所有从汽车中选择rideid、年份、型号、评级、1作为相关性WHERE cat2 LIKE"%$关键字2%")AS t GROUP BY rideid ORDER BY SUM(相关性)DESC";

大家好,我在其他成员的帮助下得到了这个很棒的查询,它可以很好地根据相关性系统对我的结果进行排序。因此,当我的两个搜索条件都被填充时,这些结果将首先排序。

问题是,不符合两个标准(只符合一个标准)的结果显然会出现在结果中,但顺序较低。我真的想丢弃这些结果,有没有一种方法可以细化这个查询,以便只有满足这两个条件的结果才能返回?

将LIKE更改为=不是一个选项,因为结果字段是文本区域,所以mysql需要在文本区域内搜索关键字。

感谢

    SELECT rideid, year, model, rating, SUM(Relevance) as SearchRelevance 
      FROM( 
        SELECT rideid, year, model, rating, 2 as Relevance FROM cars 
          WHERE cat LIKE '%$keyword%' AND cat2 LIKE '%$keyword2%') 
        AS t GROUP BY rideid ORDER BY SUM(Relevance) DESC

您可以将HAVING SUM(Relevance) = 2添加到外部SELECT,刚好在GROUP BY rideid之后,因为Relevance是匹配的条件数。(如果您稍后添加更多标准,则需要用更大的数字替换2以匹配。)

但是,您也可以用一种更简单的方式编写整个查询:去掉子选择和UNION ALL,只执行WHERE cat LIKE '%$keyword%' AND cat2 LIKE '%$keyword2%'。子选择和UNION的全部目的是使获得仅匹配其中一个或另一个的结果成为可能。

对于匹配这两个条件的记录,是我遗漏了什么,还是您总是得到SUM(相关性)=2?

试试这个:

SELECT rideid, year, model, rating, SUM(Relevance) SearchRelevance
FROM( 
    SELECT rideid, year, model, rating, 1 as Relevance FROM cars 
    WHERE cat LIKE '%$keyword%' 
    UNION ALL 
    SELECT rideid, year, model, rating, 1 as Relevance FROM cars 
    WHERE cat2 LIKE '%$keyword2%'
) AS t 
HAVING SearchRelevance > 1
GROUP BY rideid 
ORDER BY SearchRelevance DESC