对包含SQL查询数据的表中的NON-SQL表列进行排序


Sorting a NON-SQL table column in a table containing data from SQL query

下面我将代码精简为简化版本。我正在为存储SQL SELECT结果

  • 姓氏(dlname)
  • 类别
  • 将此数据添加到数据库的日期(date_aded)
  • 客户端名称(客户端)

我在SQL SELECT之外附加了一个名为"days_on_list"的附加字段。此字段显示自数据添加到数据库以来的天数,使表输出5列用户数据。所有5列都是可排序的。

我正在使用服务器端JSON,并且已经成功地将其显示到表中,并对5列中的4列执行排序。的问题是我无法对"days_on_list"字段进行排序,因为包含SQL代码的PHP文件只允许我对select查询中的4个字段进行排序。有没有一种方法可以使"days_on_list"列在表中进行排序?我知道我可以将这个字段添加到sql表中,但我必须在服务器上运行一个预定的事件来每天更新这个字段(我对此感到不舒服)。

是否有其他方法允许这种灵活的表排序

很抱歉问题标题(可能令人困惑),我很难将其放入问题中

/*SQL CODE ABOVE HERE STORES SELECT RETURNS IN $result*/
$cart = array();
$i = 0; //index the entries
// get variables from sql result.
if ($num_rows > 0) { //if table is populated...
  while ($row = mysqli_fetch_assoc($result)) {
    //calculate days on list by getting the number of days from 
    //the 'date_added' to today 
    $date1 = date_create($row['date_added']);
    $today = date_create(date("d-m-Y"));
    $interval = date_diff($date1, $today);
    $doty = $interval - > format("%a");
    $cart[$i] = array(
      "dlname" => htmlspecialchars($row['dlname']),
      "category" => htmlspecialchars($row['category']),
      "date_added" => htmlspecialchars($row['date_added']),
      "client" => htmlspecialchars($row['client']),
      "days_on_list" => $doty, //date_added to now
    );
    $i = $i + 1; //add next row
  }
  //encoding the PHP array
  $json_server_pagination_data = array(
    "total" => intval($num_rows),
    "rows" => $cart, //array data
  );
}
echo json_encode($json_server_pagination_data);

因为days_on_list是通过简单地将date_added与当前日期进行比较来计算的,所以按days_on_list排序的效果应该与按date_added排序的效果完全相反。

换句话说,实际上不需要按days_on_list进行排序。如果用户选择days_on_list作为排序列,只需使用ORDER BY date_added(在相反的ASC/DESC方向上)。