2015-12-26 2 views
-1

Я выполняю запрос, когда я выбираю последние 20 записей, к сожалению, я хочу, чтобы они были в правильном порядке.внутренний запрос sql дает ошибку псевдонима

Значение после выбора по убыванию, тогда я хочу изменить его на восходящий.

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; 

Но результат МЫС QL запрос потерпел неудачу с ошибкой:

Every derived table must have its own alias

Любые советы будут оценены

ответ

2

Попробуйте исходный запрос, а затем использовать то РНР() или 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() сортирует массив с использованием имени индекса [ «ID»] в качестве значения на заказ.

Если вы ленивы, как я обычно, вы можете упростить usort() на что-то вроде этого:

usort($stuff,function($a,$b){return $a['id']<$b['id'];}); 

Вы можете найти больше о usort() here.

Удачи вам!

+0

Это работало как очарование. Я использовал короткий метод, который напомнил мне о чем-то, чему я научился в школе однажды, называется сортировкой пузыря или чем-то подобным. Просто не могу запомнить это правильно .. – Vaupell

0

попробуйте это SELECT * FROM tablename ORDER BY .id DESC LIMIT 20 и ORDER BY dtg ASC;

0

Попробуйте это.

;WITH cteOrderdData 
    (SELECT top 100 percent * 
       FROM tablename 
       ORDER BY tablename.id 
       ASC LIMIT 20) 
select * from cteOrderdData 
Смежные вопросы