每当
"select * from table where userid=xx"
完成类似的查询时,mysql 就会从表的第一行到最后一行获取这些值。
但我想从最后一个到第一个进行选择,以便最近更新的值首先显示在结果中。
我不能这样做"select * from table where userid=xx order by time DESC"
,因为表中没有时间列。我只想首先显示表中最近更新的项目。
$result= mysql_query("SELECT
(SELECT column FROM table WHERE [condition] ORDER BY column LIMIT 1) as 'first',
(SELECT column FROM table WHERE [condition] ORDER BY column DESC LIMIT 1) as 'last'");
$row=mysql_fetch_array($result);
echo $row['first'];
echo $row['last'];
如果您有任何自动递增字段,则可以按该 desc 排序。
为了保证结果,您必须提供要排序的列。因此,您将不得不更改表结构或决定订购什么。
一个技巧是将数据按照呈现到数组中的顺序拉入,然后开始从该数组的底部弹出。
您要么必须具有时间戳、自动增量 ID,要么必须具有要排序的其他列。
仅仅因为您在不使用子句时以特定顺序从数据库中获取行ORDER BY
,并不意味着它们可以保证以该顺序返回。它也不意味着结果集中的任何顺序。您需要一个可以使用的明确字段ORDER BY
,否则您无法做您想做的事情。
如果您没有可以依赖的列,您可以为此做一些技巧:
SELECT * FROM (SELECT *,(@x:=@x+1) default_ordering FROM `table_name`, (SELECT @x:=0) t2) any_name ORDER BY default_ordering DESC