我正在运行查询,其中我选择了最后20个条目,不幸的是我希望它们按照正确的顺序。
意思是在通过降序选择后,我想将其反转为升序。
我可以排序的colums
' ID' (唯一标识符和订单)和' dtg' (unix时间戳)
我当前的查询:
SELECT *
FROM tablename
ORDER BY tablename.id DESC
LIMIT 20
所以我尝试使用外部查询修复它..
SELECT *
FROM (SELECT *
FROM tablename
ORDER BY tablename.id
DESC LIMIT 20)
ORDER BY dtg ASC;
但结果是 MySQL查询失败,错误:
每个派生表都必须有自己的别名
任何建议都将不胜感激
答案 0 :(得分:2)
尝试原始查询,然后使用PHP的sort()或usort()函数根据需要对结果进行排序。例如,假设您的数组在第一部分中设置为:
$stuff = array(
array(
"name"=>"alice"
"id"=>4
),
array(
"name"=>"bob"
"id"=>3
),
array(
"name"=>"mike"
"id"=>2
),
array(
"name"=>"eve"
"id"=>1
)
);
usort($stuff,function($a,$b){
if ($a['id'] == $b['id']) {
return 0;
}
return ($a['id'] < $b['id']) ? -1 : 1;
});
如您所见,usort()使用命名索引[&#39; id&#39;]作为要订购的值对数组进行排序。
如果你像我一样懒惰,你可以将usort()简化为:
usort($stuff,function($a,$b){return $a['id']<$b['id'];});
您可以找到有关usort()here的更多信息。
祝你好运!答案 1 :(得分:0)
试试这个 SELECT * FROM tablename ORDER BY .id DESC LIMIT 20和ORDER BY dtg ASC;
答案 2 :(得分:0)
试试这个。
;WITH cteOrderdData
(SELECT top 100 percent *
FROM tablename
ORDER BY tablename.id
ASC LIMIT 20)
select * from cteOrderdData