内部sql查询给出了别名错误

时间:2015-12-26 19:59:24

标签: php sql-server

我正在运行查询,其中我选择了最后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查询失败,错误:

  

每个派生表都必须有自己的别名

任何建议都将不胜感激

3 个答案:

答案 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