我有一个有近100个字段的数据库。 DB结构是Mysql Order by Tweak
ID |评论|时间
我需要只获取5 最新记录(我可以使用ORDER BY时间DESC这些记录)。但是,在打印它们时,我需要首先打印这5条记录中最老的,然后以最后打印最新记录的方式进行反转。
我有一个有近100个字段的数据库。 DB结构是Mysql Order by Tweak
ID |评论|时间
我需要只获取5 最新记录(我可以使用ORDER BY时间DESC这些记录)。但是,在打印它们时,我需要首先打印这5条记录中最老的,然后以最后打印最新记录的方式进行反转。
好吧,按升序排列与行
数量的限制获取结果集之后你可以做到这一点才能打印以相反的顺序(降序)
$data= array();
while ($row = mysql_fetch_assoc($result)) {
$data[] = $row;
}
$records = array_reverse($data);
OR
这可以用mysql_data_seek
直接从here
for ($i = mysql_num_rows($resultset) – 1; $i >= 0; $i–) {
mysql_data_seek($resultset, $i);
$row = mysql_fetch_assoc($result);
echo $row['abc'] . ' ' . $row['xyz'] . "\n";
}
您可以在结果列表中使用PHP的array_reverse()
函数。如果你有很多的访问本声明这将是更好的来代表它作为物化视图
select * from (select * from table_name where 1=1 order by time desc
limit 5) as tbl order by tbl.time;
编辑:
您还可以使用这样的事情。尽管在mysql中没有物化视图,但可以模拟它们(http://lists.mysql.com/mysql/207808)
使用物化视图或模拟物化视图将严重超出建议的php方法。无论如何,大多数提到的消耗大量内存。
我想你可以沿(未经测试)的线做一些事情:
SELECT
*
FROM (
SELECT
id, comment, time
FROM
table
ORDER BY
time DESC
LIMIT 5
)
ORDER BY
time ASC
UPDATE
显然, “派生表必须有它自己的别名”(error #1248)。其他答案已经做到了,所以我会跳上这一行。下面你会发现修改过的(和测试过的)查询:
SELECT
derived.*
FROM (
SELECT
id, comment, time
FROM
table
ORDER BY
time DESC
LIMIT 5
) AS derived
ORDER BY
derived.time ASC
顺便提一句,这是supported as of MySQL 4.1。
SELECT s.* FROM (
SELECT id, comment, time FROM table1
ORDER BY time DESC
LIMIT 5) as s
ORDER BY s.time ASC