簡體   English   中英

MySQL 根據條件跳過列

[英]MySQL Skip columns on condition

我有下表:

 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

這只是表的一小部分,它有很多日期。 每個新日期都以未知數量的零開始和結束。 我必須跳過這些零,只得到它們之間的東西。 所以我想出了以下解決方案:

  1. 獲取速度為正的第一行的 ID(在我們的表中它的 ID 號為 4)。

  2. 獲取速度為正的最后一行的 ID(在我們的表中它的 ID 編號為 12)。

  3. 獲取這兩個 ID(4 和 12)之間的行。

我得到speed為正的第一行的id

$q1=$conn->prepare("SELECT * FROM tableX WHERE speed > 0 order by date asc LIMIT 1");
$q1->execute();
$r1=$q1->fetch();
$first_id = $r1['id'];

然后獲取最后一行speed為正的id

$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 行不是錯誤。

我的代碼實際上正在運行,但我認為我的這個解決方案很蹩腳,所以我正在尋找一種改進,將所有這三個查詢合二為一!

我不確定這是否正是您想要的,但我認為這將等同於您的整個代碼:

$q3=$conn->prepare("SELECT * FROM tableX WHERE speed > 0");
$q3->execute();
while($r3=$q3->fetch(){}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM