PHP-查询最接近给定数字的MySQLi结果

PHP-查询最接近给定数字的MySQLi结果,php,Php,我正在尝试按金额搜索发票。因此,我希望搜索所有发票+/-搜索金额的10%,并按最接近给定数字的结果排序: $search = 100.00 $lower = $search * 0.9; // 90 $higher = $search * 1.1 // 110 $results = $db->select("SELECT ID from `invoices` WHERE Amount >= `$lower` && Amount >= `$higher`");

我正在尝试按金额搜索发票。因此,我希望搜索所有发票+/-搜索金额的10%,并按最接近给定数字的结果排序:

$search = 100.00
$lower = $search * 0.9; // 90
$higher = $search * 1.1 // 110

$results = $db->select("SELECT ID from `invoices` WHERE Amount >= `$lower` && Amount >= `$higher`");
所以,我不知道如何订购这些。假设此查询提供以下结果:

108, 99, 100, 103, 92
我想对结果进行排序,从实际搜索的数字开始(因为它是精确匹配的),然后从那里开始计算,因此:

100, 99, 103, 92, 108
试试这个:

$search=100.00
$lower=$search*0.9;//90
$higher=$search*1.1//110
$results=$db->select(“从发票中选择ID`

如果Amount>=`$lower`&&Amount您可以按如下方式执行此操作:

$search = 100.00
$deviation = 0.10;

$results = $db->select("
    SELECT ID, Amount, ABS(1 - Amount/$search) deviation
    FROM   invoices
    WHERE  ABS(1 - Amount/$search) <= $deviation
    ORDER  BY ABS(1 - Amount/$search)
");
这是一个

通过这种方式,您可以让SQL通过将实际金额除以“完美”金额($search)来计算偏差。对于完美匹配,这将是1。通过从1中减去它,完美匹配由值0表示。任何偏差都是非零的。通过取其绝对值,您可以得到精确的偏差作为小数(表示百分比),例如0.02(即2%)


通过将此偏差与给定的最大偏差($DEVISION)进行比较,您可以得到所需的值。当然,可以很容易地对计算出的偏差进行排序。

Amount>=$lower&&Amount>=$higher
?真的吗?可能
Amount使用子句来获取两个数字之间的值。