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

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

Столбцы, по которым я могу сортировать,

'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 завершился ошибкой:

Каждая производная таблица должна иметь свой псевдоним

Любой совет будет принят во внимание

-1
Vaupell 26 Дек 2015 в 22:59

3 ответа

Лучший ответ

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

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

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

Дополнительную информацию о usort () можно найти здесь.

Удачи!

2
MyUser 26 Дек 2015 в 20:14

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

;WITH cteOrderdData
  (SELECT top 100 percent * 
               FROM tablename 
               ORDER BY tablename.id
               ASC LIMIT 20)
 select * from cteOrderdData
0
bhushanvinay 26 Дек 2015 в 20:28

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

0
Mr. Ramil 26 Дек 2015 в 20:15