我在表中有7条记录,但我想只选择按日期DESC排序的最后5条记录。我想在我的表格中按日期ASC显示这些记录。
我的代码:
$select_record = mysqli_query($con, "select * from table order by date DESC limit 5");
while($row=mysqli_fetch_array($select_record)){
$date = $row['date'];
echo "<tr><td>$date<br></td></tr>";
像我这样在我的表中记录
Date
2014-05-15
2014-04-15
2014-06-15
2014-02-15
2014-07-15
2014-01-15
2014-03-15
我的代码给我这样的结果
Date
2014-07-15
2014-06-15
2014-05-15
2014-04-15
2014-03-15
但我想要这样的结果
Date
2014-03-15
2014-04-15
2014-05-15
2014-06-15
2014-07-15
答案 0 :(得分:4)
在第一个上面做第二个SELECT:
SELECT t.* FROM
(SELECT * FROM `table` ORDER BY `date` DESC LIMIT 5) t
ORDER BY t.`date` ASC
简短版本:
(SELECT * FROM `table` ORDER BY `date` DESC LIMIT 5) ORDER BY `date` ASC
答案 1 :(得分:0)
编辑你的while循环:
而不是这样做:
while($row=mysqli_fetch_array($select_record)){
$date = $row['date'];
echo "<tr><td>$date<br></td></tr>";
}
尝试这样做:
create an array that can store your date values retrieved from query
while($row=mysqli_fetch_array($select_record)){
$date = $row['date'];
Add $date to the array you created
}
Iterate the array from the END to START and print dates .
{
echo "<tr><td>$date<br></td></tr>";
}
答案 2 :(得分:0)
将您的日期存储在数组中,然后使用 array_reverse() PHP函数以相反的顺序获取结果。
array_reverse — Return an array with elements in reverse order
答案 3 :(得分:0)
试试这个:
$select_record = mysqli_query($con, "select * from table order by date DESC limit 5");
// Sort in chronological order.
usort($select_record, function($a, $b) {
return strcmp($a['db'], $b['db']);
});
while($row=mysqli_fetch_array($select_record)){
$date = $row['date'];
echo "<tr><td>$date<br></td></tr>";
答案 4 :(得分:0)
简单的解决方案是在PHP域中提取行和反向列表。根据结果大小,这将是我的简单解决方案。
如果你真的想这样做而不必将完整的结果存储在PHP域中,你可以通过子选择来完成。这意味着用以下代码替换您的查询表达式:
$select_record = mysqli_query($con, "SELECT * FROM (select * from table order by date DESC limit 5) AS result ORDER BY date");
但我认为这比仅仅在PHP中反转结果更难以维护。
答案 5 :(得分:0)
您还可以将结果保存在数组中。然后,您可以使用sort($array);