【问题标题】:php mysql calculating successive rowsphp mysql计算连续行
【发布时间】:2012-01-30 04:06:53
【问题描述】:

我正在编写一个 php 脚本来确定卡车的燃料使用量。我为此使用 mysql db 表。

卡车可以在多个位置获取燃料,例如 A、B、C、D 位置。 卡车从这些最近的地点之一获取燃料。并且每次卡车加油时,负责人都会输入“油量”和“里程表”的数值进行编程。

sequence_id locations   fuelDispensed   odometer 
1           C           700             8100
2           A           400             9700
3           B           500             15500
4           C           600             17950

等等。

利用 db 提供的这些信息,只需使用“sequence_id”计算连续行之间的“里程表”差异,就很容易找到卡车从一个位置行驶到另一个位置的公里数或英里数。

问题是:人们可能会忘记或无法将值输入程序并稍后再执行。数据变成这样:

sequence_id locations   fuelDispensed   odometer 
1           C           700             8100
2           B           500             15500
3           C           600             17950
4           A           400             9700

在这种情况下,无法根据 sequence_id 在连续行之间进行计算。也许,通过对里程表值进行升序排序,然后在行之间进行连续计算似乎是合乎逻辑的,但我不知道如何做到这一点。

编辑:我的查询是这样的:

    SELECT 
    t1.odometer AS km1, 
    t2.odometer AS km2,

    FROM fueldispensed AS t2, fueldispensed AS t1
    WHERE (t1.sequence_id+1= t2.sequence_id) AND (t1.truck_id='$truckid') AND (t2.truck_id='$truckid')  ORDER BY t1.sequence_id";

向该查询添加 ORDER BY 无效,因为我在“sequence_id”上获得了继承。

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    在您的 SQL 选择语句中添加 ORDER BY

    ORDER BY odometer ASCENDING
    

    编辑

    好的!我想我现在明白你的问题了。

    SELECT t1.truck_id,
           t1.odometer AS km1,  
           MIN(t2.odometer) AS km2
      FROM fueldispensed AS t1, 
           fueldispensed AS t2 
     WHERE t2.truck_id = t1.truck_id
       AND T2.odometer > t1.odometer
     ORDER BY t1.truck_id,
              t1.odometer 
     GROUP BY t1.truck_id,
              t1.odometer 
    

    应该给你一些有用的东西,虽然效率不高

    根据需要将您的 truck_id 选择编辑到查询中

    【讨论】:

    • 要么按顺序排序,要么按里程表排序...一个给你错误的结果,另一个给你你要求的结果......但你不能同时拥有它...... 更改您的 ORDER BY 为 ORDER BY 里程表 ASCENDING
    • 我应该从查询中删除这部分 t1.sequence_id+1= t2.sequence_id 吗?因为我将表加入自身以获得连续的行
    • 将 ORDER BY t1.sequence_id 更改为 ORDER BY t1.odometer
    • 将 ORDER BY 更改为 t1.odometer 只是以不同的方式排序。我无法得到我想要的。我想连续计算并获得里程表之间的差异,例如第一个和第二个,第二个和第三个 e.t.c
    猜你喜欢
    • 2020-06-18
    • 1970-01-01
    • 1970-01-01
    • 2014-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多