2016-10-14 63 views
0

用一個簡單的mysqli_query從我的數據庫中檢索所有任務。每個任務都有一個最後期限。我想計算每個單一任務剩下多少天。完成之後,我想根據剩下的日期排列所有任務。我怎樣才能做到這一點?我有這樣的一段簡單的代碼讓所有的任務:如何通過其中一行來訂購MySQL?

$sql = mysqli_query($mysqli, "SELECT * FROM tasks"); 
while($rows=mysqli_fetch_array($sql,MYSQLI_ASSOC)){ 
    $deadline = $rows['deadline']; 
    $today = strtotime('now'); 
    $date_diff = $deadline - $today; 

    echo $date_diff; 
} 

但我怎麼能由$ date_diff訂購它們?

+0

'選擇T *,DATEDIFF(日,t.deadline,CURDATE())AS DiffDate FROM任務爲T ORDER BY DATEDIFF(日, '最後期限',CURDATE())' – Blinkydamo

+0

您在排序結果具有'ORDER BY'的SQL。但是,你是否真的想顯示錶中存在的所有*任務,甚至是幾年前完成的任務?你可能想要添加一個'WHERE'子句。表中應該有一些狀態字段,所以你可以排除完成的任務(因爲任務已經過了截止日期並不一定完成)。 –

回答

-1

您可以在mysqlORDER BY中執行此減操作相同。這裏是你如何做到這一點,

$sql = mysqli_query($mysqli, "SELECT * FROM tasks ORDER BY (deadline-UNIX_TIMESTAMP())") DESC; 

我們使用UNIX_TIMESTAMP()獲得當前的時間戳和從期限扣除它。

在查詢的結尾處我們使用了DESC關鍵字,它將結果按降序排列的天數排序。

1

你可以簡單地在你的sql查詢中做到這一點。

$sql = mysqli_query($mysqli, "SELECT TIMEDIFF(deadline, CURRENT_TIME) as date_diff FROM tasks ORDER BY TIMEDIFF(deadline, CURRENT_TIME)"); 
+0

爲什麼還要在排序中計算?除了後者需要更多時間之外,(ORDER BY x)和(ORDER BY x - constant)之間沒有區別。 – Erik

+0

是的,那實際上是真的,你可以使用「ORDER BY截止日期」,並且會以相同的速度返回相同的結果。謝謝你提到這一點。 – Okba