我已经尝试了一些选项,但是它根本不起作用或不符合我的需求。
它关于以下SQL(这不起作用,但最接近我需要的):
SELECT CASE WHEN r.`content` LIKE '% word1 %'
then 1
else 0
END AS `val1`
, CASE WHEN r.`content` LIKE '% word2 %'
then 1
else 0
END AS `val2`
, CASE WHEN r.`city` LIKE 'cityname'
then 1
else 0
END AS `val3`
, (`val1`+`val2`+`val3`) AS `reference_value`
FROM `testimonials` as r
WHERE `accepted`='1'
ORDER BY `reference_value`
因此,基本上,得分最高的条目最终排在最前面。当3个案例匹配时,reference_value
将获得3分。该代码是动态的,因此它也可以是4,5,6,7或更多的CASE。
我希望这对您有意义。提前致谢。
您不能val1
在同一SELECT
列表中重复使用计算所得的值(如查询中的值)。
使用子查询,或重复CASE以求和它们的值。在这种情况下,我的首选是子查询,但是实际需求和实际执行计划(说明)可以随时覆盖它。
SELECT
val1,val2,val3,
val1+val2+val3 as reference_value
FROM (
SELECT CASE WHEN r.`content` LIKE '% word1 %'
then 1
else 0
END AS `val1`
, CASE WHEN r.`content` LIKE '% word2 %'
then 1
else 0
END AS `val2`
, CASE WHEN r.`city` LIKE 'cityname'
then 1
else 0
END AS `val3`
FROM `testimonials` as r
WHERE `accepted`='1'
) TMP
ORDER BY `reference_value`
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句