2016-09-10 2 views
2

Я извлекаю некоторые данные в sql-порядке по DESC, тогда я хочу отменить результат. Я делал это, выталкивая данные в массив, а затем используя array_reverse, но обнаружил, что он довольно подвержен налогообложению по времени процессора и хотел бы просто использовать правильный SQL-запрос.Порядок по DESC обратный результат

Я просмотрел эту тему https://stackoverflow.com/questions/12534248/sql-server-reverse-order-after-using-desc#=, но не может заставить ее работать с моим запросом.

SELECT live.message, 
     live.sender, 
     live.sdate, 
     users.online 
FROM live, users 
WHERE users.username = live.sender 
ORDER BY live.id DESC 
LIMIT 15 

ответ

0

Вы можете обернуть свой запрос другим запросом и заказать с помощью asc. Поскольку вы хотите заказать по live.id, вы должны включить его во внутренний запрос, чтобы внешний мог сортировать по нему:

SELECT message, sender, sdate, online 
FROM  (SELECT live.message, live.sender, live.sdate, users.online, live.id 
      FROM  live, users 
      WHERE users.username = live.sender 
      ORDER BY live.id DESC 
      LIMIT 15) t 
ORDER BY id ASC 
1

Вы можете разместить свой запрос в подзапрос, а затем в обратном порядке:

SELECT t.message, 
     t.sender, 
     t.sdate, 
     t.online 
FROM 
(
    SELECT live.id, 
      live.message, 
      live.sender, 
      live.sdate, 
      users.online 
    FROM live 
    INNER JOIN users 
     ON users.username = live.sender 
    ORDER BY live.id DESC 
    LIMIT 15 
) t 
ORDER BY t.id ASC 

Вы заметите, что я заменил подразумеваемый JOIN с явнойINNER JOIN. Обычно считается нежелательным использование запятых в предложении FROM (q.v. стандарт ANSI-92), поскольку это затрудняет чтение запроса.