我有3张桌子:

价钱

id   price   date
1     50     20130716
2     30     20130717


TVA

id    val      start      end
1      7     20080101   20103112
2      8     20110101


余量

id    qty    marg
1     500     25
2     600     20
3     800     15
4     1000    13
5     1250    11
...


现在我有这个查询不起作用:

$quantity = '557';

$link->query("
       SELECT (
              (price+marg)*((val+100)/100)
              )
       FROM PRICE
         JOIN TVA
         JOIN MARGIN
       WHERE date = '20130717'
             AND end = ''
             AND qty = '$quantity'
");


问题在于表上没有qty = '557'
我想做的是选择最接近(在这种情况下)“ 557”的数量。

因此,如果:

$quantity = '557'查询应选择600

$quantity = '701'查询应选择800

$quantity = '1238'查询应选择1250

等等

这可能吗?

最佳答案

如果将其放入过程中,则可以使用如下代码(伪代码排序):

CREATE PROCEDURE pDoStuff(@target INTEGER)
AS

    DELCARE @qty INTEGER

    -- Get closest qty
    @qty = SELECT TOP 1 qty
            FROM table
            ORDER BY ABS(@target - qty) ASC


    -- use that "actual" qty in your query
    SELECT  ((price+marg)*((val+100)/100)
    FROM    price
    JOIN    TVA
    JOIN    MARGIN
    WHERE   date = 'thedate'
    AND     end = ''
    AND     qty = @qty

GO


语法不正确,但是可以给您一个提示。这将允许您从原始查询中选择数量最接近的所有行。此处的大多数其他答案将最终结果限制为一行(这可能是您实际想要的,也可能不是)。

关于php - 获得最接近值(value)的mysql,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17727115/

10-10 16:17