[英]Limit to only relevant results - MYSQL
SELECT rideid, year, model, rating, SUM(Relevance) as 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 GROUP BY rideid ORDER BY SUM(Relevance) DESC ";
大家好,我在其他成员的帮助下得到了这个很棒的查询,它在基于相关性系统对我的结果进行排序时效果很好。 因此,当我的两个搜索条件都满足时,这些结果将首先排序。
问题在于,两个条件都不匹配(仅匹配1个条件)的结果显然会以较低的顺序显示在结果中。 我实际上想破坏这些结果,有没有一种方法可以优化此查询,以使返回的唯一结果是满足两个条件的结果?
不能将LIKE更改为=,因为结果字段是textareas,因此mysql需要在textareas中搜索关键字。
谢谢
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
我是否丢失了某些东西,或者对于同时满足两个条件的记录,您将始终获得SUM(Relevance)= 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
您可以仅在GROUP BY rideid
之后将HAVING SUM(Relevance) = 2
到外部SELECT
,因为Relevance
是对匹配的条件数的计数。 (如果以后添加更多条件,则需要将2替换为更大的数字以进行匹配。)
但是,您还可以用一种更简单的方式编写整个查询:摆脱子选择和UNION ALL
,然后在WHERE cat LIKE '%$keyword%' AND cat2 LIKE '%$keyword2%'
。 子选择和UNION
是使获得仅与另一个匹配的结果成为可能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.