douwen7331 2018-06-07 21:08
浏览 30
已采纳

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

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  
    }
  • 写回答

1条回答 默认 最新

  • dongzhouzhang8696 2018-06-07 21:19
    关注

    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.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog