选择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