mysql 最接近的值,在mysqli数组php中查找最接近的值

In my app, the user can enter a number for pricing and based on the input, the database will return a plan with the same price. If there is no number/price corresponding to the user input, I would like the program to find the plan with the nearest value. How can I find the "nearest" value in a haystack?

Examples :

User inputs : $14, Returns the 15$ plan

User inputs : $20, Returns the 15$ plan

User inputs : 25$. Returns the 30$ plan

Etc...

This is what I have :

//Create pricing for each plan

$getplansql = "SELECT SUM(`Distributor Net Price`) AS dnetprice FROM `services` wspn

WHERE wspn.planName = '$planname_num[$pn]' AND wspn.planLevel = '$planlevels_num[$pl]'";

$resultplans = $conn->query($getplansql);

while($plan = mysqli_fetch_assoc($resultplans)) {// output data of each row

$inhousepricing = ($plan['dnetprice'] * 0.15) + ($plan['dnetprice']);

$finalpricing = round($inhousepricing);

if($planprice == $finalpricing) {//found matching row// there's a plan with that price

//put plan info in array

$planArray = array(

'planName' => $plan['name'],

'planPrice' => $finalpricing,

'planDescription' => $plan['description']

);

break;//stop statement and only get the first plan//row found

}else{//get the plan with the nearest value

//put plan info in array

}

解决方案

Add 15% and find the closest price in the SQL query itself.

$getplansql = "name, description, dnetprice

FROM (

SELECT planName AS name, planDescription AS description, ROUND(SUM(`Distributor Net Price`) * 1.15) AS dnetprice

FROM `services` wspn

WHERE wspn.planName = '$planname_num[$pn]' AND wspn.planLevel = '$planlevels_num[$pl]'

) AS x

ORDER BY ABS(dnetprice - $planprice)

LIMIT 1";

$resultplans = $conn->query($getplansql);

$planArray = mysqli_fetch_assoc($resultplans);

This will just return the one row that you want, so you don't need a while loop.

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值