下面我将代码精简为简化版本。我正在为存储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方向上)。