如何按MySQL的一行来排序?


How do I order an MySQL by one of it's rows?

使用一个简单的mysqli_query,我从数据库中检索所有任务。每一项任务都有最后期限。我想计算一下每个任务还剩多少天。做完之后,我想根据剩下的天数来安排所有的任务。我怎样才能做到这一点呢?我有这段简单的代码来获取所有的任务:

$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来订购它们呢?

您可以在sql查询中简单地执行此操作。

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

可以在mysqlORDER BY中执行此减号操作。这是你应该做的,

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

我们已经使用UNIX_TIMESTAMP()来获取当前时间戳并从截止日期中扣除它。

在查询结束时,我们使用了DESC关键字,它将按天数降序排序结果