Обратный "естественный порядок" таблицы MySQL без ORDER BY? - PullRequest
2 голосов
/ 23 сентября 2010

Я имею дело с устаревшей таблицей базы данных, в которой нет столбца даты вставки или столбца уникального идентификатора, однако естественный порядок вставки остается действительным при рассмотрении простого SELECT *, показывающего от самого старого до самого нового.

Я хотел бы получить эти данные с нумерацией страниц, но в обратном порядке, как если бы это было ORDER BY date DESC

Я думал об упаковке запроса, присвоении числового идентификатора результирующим строкам и затем выполненииORDER BY на результат, но вау это кажется сумасшедшим.

Есть ли более простое решение, которое я пропускаю?

Я не могу добавить столбцы в существующую таблицу, я должен работать с ней какесть.

Спасибо за любые идеи!

Ответы [ 2 ]

3 голосов
/ 23 сентября 2010

Используйте @rownum в своем запросе для нумерации каждой строки, а затем упорядочите их по порядку @rownum. Вот пример .

select @rownum:=@rownum+1 ‘rank’, p.* from player p, (SELECT @rownum:=0) r order by score desc limit 10;

Наконец, имейте в виду, что полагаться на текущий заказ, возвращаемый в долгосрочной перспективе, не рекомендуется.

1 голос
/ 23 сентября 2010

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

Если у вас слишком много записей, вы можете вместо этого использовать представление. Это объект базы данных, который может использоваться для объединения данных из разных таблиц или для представления измененного представления одной таблицы, помимо прочего. В этом случае вы можете попробовать создать представление вашей таблицы и добавить сгенерированный столбец идентификаторов. Затем вы можете запустить операторы SELECT в этом порядке упорядочения по добавленному вами новому столбцу.

Однако следует помнить о совете другого автора выше: порядок, в котором строки возвращаются без предложения ORDER BY, является произвольным и может изменяться без уведомления. Было бы лучше изменить вашу таблицу, если это вообще возможно.

Синтаксис mySQL CREATE VIEW

...