我有下表:
id speed date 1 0 01/01/2015 2 0 01/01/2015 3 0 01/01/2015 4 0 01/01/2015 5 0 01/01/2015 6 0 01/01/2015 7 25 01/01/2015 8 78 01/01/2015 9 13 01/01/2015 10 45 01/01/2015 11 0 01/01/2015 12 80 01/01/2015 13 86 01/01/2015 14 10 01/01/2015 15 0 01/01/2015 16 0 01/01/2015 17 0 01/01/2015 18 0 01/01/2015
这只是表格的一小部分,它有很多日期。每个新日期以未知数量的零开始和结束。我必须跳过这些零,只得到它们之间的区别。所以我提出了以下解决方案:
获取速度为正的第一行的ID(在我们的表中,它的ID号为4)。
获取速度为正的最后一行的ID(在我们的表中,它的ID号为12)。
获取这两个ID(4和12)之间的界限。
我得到id
为正的第一行的speed
:
$q1=$conn->prepare("SELECT * FROM tableX WHERE speed > 0 order by date asc LIMIT 1");
$q1->execute();
$r1=$q1->fetch();
$first_id = $r1['id'];
然后获取id
为正的最后一行的speed
:
$q2=$conn->prepare("SELECT * FROM tableX WHERE speed > 0 order by date desc LIMIT 1");
$q2->execute();
$r2=$q2->fetch();
$last_id = $r2['id'];
然后使用那些id
来获得我想要的东西:
$q3=$conn->prepare("SELECT * FROM tableX WHERE id between '$first_id' and '$last_id'");
$q3->execute();
while($r3=$q3->fetch(){}
预期结果:
id speed date 7 25 01/01/2015 8 78 01/01/2015 9 13 01/01/2015 10 45 01/01/2015 11 0 01/01/2015 12 80 01/01/2015 13 86 01/01/2015 14 10 01/01/2015
PS:第11行不是错误。
我的代码实际上正在运行,但我认为我的解决方案很蹩脚,所以我正在寻找一种改进,将所有这三种查询整合在一起!
答案 0 :(得分:-1)
我不确定这是否正是您想要的,但我认为这相当于您的整个代码:
$q3=$conn->prepare("SELECT * FROM tableX WHERE speed > 0");
$q3->execute();
while($r3=$q3->fetch(){}