php查询排序,php – 在最佳匹配上排序SQL查询

基本原则是为每条记录创建相关性分数,然后按此排序.

如果你希望每个标准具有相同的权重,在MySQL中你可以将每个布尔表达式加在一起(注意这是非标准的SQL-在其他RDBMS中你可能必须使用CASE来测试条件并产生一个数字):

ORDER BY (review>=40/100) + (price<=10.00) + (allows_pets=0) DESC

如果标准的权重不相等,您可以将每个表达式乘以其权重:

ORDER BY 5*(review>=40/100) + 3*(price<=10.00) + 1*(allows_pets=0) DESC

和/或如果在某些子集上匹配的那些应该始终首先出现而不考虑后面的结果,您可以划分ORDER BY子句:

ORDER BY 5*(review>=40/100) + 3*(price<=10.00) DESC,

1*(allows_pets=0) DESC

如果要在结果中查看相关性分数,可以类似地将以上任何表达式添加到SELECT中(然后在ORDER BY子句中使用结果列,以避免将其写入两次):

SELECT *,

(review>=40/100) + (price<=10.00) + (allows_pets=0) AS relevance,

FROM my_table

ORDER BY relevance DESC

请注意,如果您想获取具有最接近某个目标的值的记录(例如,min_review接近40%,而不是精确),您可以获取它与目标值之间的(绝对?)差异:

IF(review>=40/100, review-40/100, NULL)

但是,如果/在与单个标准中的其他人合并时,您必须小心对表达进行适当加权.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值