php - 获取最接近的值mysql

标签 php mysql

我有 3 张 table :

价格

id   price   date
1     50     20130716
2     30     20130717

TVA

id    val      start      end
1      7     20080101   20103112
2      8     20110101

margin

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'
");

问题是 table 上没有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 - 获取最接近的值mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17727115/

相关文章:

php - Laravel 4 - 打印表格及其相关类别

mysql - 将 MySQL 表分成 2 个?当前搜索速度太慢

mysql - 类似 IDE 的系统 - 用于存储的数据库或文件系统

php - Mysql检查是否已经过了30分钟

php - for循环将两个相似的条目放入php的一个循环中

php - 通过php注册一个openfire账号

php - 缓存 API 用户凭据

mysql - 从 Phpmyadmin 恢复数据库

mysql - 当我尝试使用 MySQL 中的身份存储注册用户时出错

php - 如何在 php 多维数组中处理来自 mysql 的数据