2016-10-14 6 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

'トンを選択します。*、DATEDIFF(日、t.deadline、CURDATE())(日、 '期限'、CURDATE())あなたには結果をソート' – Blinkydamo

+0

SQLに 'ORDER BY'を付けます。しかし、あなたは実際にあなたのテーブルに存在する*すべてのタスクを、何年も前に実行されたタスクとして見せたいのですか? 'WHERE'節を追加したいかもしれません。テーブルにはステータスフィールドがいくつかあるので、終了したタスクを除外することができます(締め切りを過ぎたタスクは必ずしも完了していないため)。 –

答えて

-1

このマイナス演算は、mysqlORDER BYで同じ操作を実行できます。ここでは、我々は現在のタイムスタンプを取得し、期限からそれを控除するUNIX_TIMESTAMP()を使用しました

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

、あなたがそれを行う方法です。

クエリの最後に、DESCというキーワードを使用しました。このキーワードは結果を降順で並べ替えた日数で並べ替えます。

1

あなたは単にSQLクエリでそれを行うことができます。 DATEDIFFによるT ORDERなどのタスクFROM DiffDate AS

$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 deadline"を使うことができます。これは同じ結果を少し速く返します。それを言わせていただきありがとうございます。 – Okba

関連する問題