Нахождение ближайшего значения в массиве mysqli php - PullRequest
0 голосов
/ 08 июня 2018

В моем приложении пользователь может ввести число для расчета цены, и в зависимости от ввода база данных вернет план с той же ценой.Если нет никакого числа / цены, соответствующей вводу пользователя, я хотел бы, чтобы программа нашла план с ближайшим значением.Как мне найти «ближайшее» значение в стоге сена?

Examples :
User inputs : $14, Returns the 15$ plan
User inputs : $20, Returns the 15$ plan
User inputs : 25$. Returns the 30$ plan
Etc...

Вот что у меня есть:

//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 Ответ

0 голосов
/ 08 июня 2018

Добавьте 15% и найдите ближайшую цену в самом запросе SQL.

$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);

Это просто вернет одну нужную вам строку, поэтому вам не нужен цикл while.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...