2012-01-29 114 views
0

我正在写一个php脚本来确定卡车的燃料使用情况。我为此使用mysql数据库表。 A,B,C,D地点有几个地方可以获得燃料,比如说A,B,C,D地点。 卡车从最近的这些位置之一获取燃油。每次卡车获得燃油时,负责人将输入“燃油量”和“里程表”的值来编程。php mysql连续行计算

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

等等。

有了这个来自db的信息,只需通过使用“sequence_id”计算连续行之间的“里程表”差异,就可以轻松找到卡车从一个位置到另一个位置行驶的KM或英里数。

问题是:人们可能会忘记或不能将值输入到程序中,并在稍后执行。数据变成这样:

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”继承这个查询有没有效果。

回答

3

添加ORDER BY到SQL SELECT语句

ORDER BY odometer ASCENDING 

编辑

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

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选择到合适

+0

请看到我的编辑查询。 – mustafa 2012-01-29 18:09:45

+0

按顺序排序或按里程表排序...一个给你错误的结果,另一个给你的结果...但你不能有两种方法...... __change__你的ORDER BY为ORDER BY里程表ASCENDING – 2012-01-29 18:12:02

+0

我应该从查询中删除这部分t1.sequence_id + 1 = t2.sequence_id吗?因为我JOIN表本身以获得连续的行 – mustafa 2012-01-29 18:14:56