Как выбрать строки в обратном порядке (mysql)

Как выбрать строки в обратном порядке (DB MySQL)?

For example,
 I have a table with 12 rows (fields: id,location), I want select -4th row before a row with id = 6,
 i.e. wanted row will have id = 'not necessarily 2',
  but there is condition - where table.location='some_location'.

Каким должно быть содержание запроса к mysql?




Отредактировано через 30 минут позже.
Вот решение! В некотором примере я проверил предложение о дродиле:

mysql> select * from subscrs where id < 100000 order by id desc limit 4;
+-------+--------+-----------+-------+
| uid   | subscr | event     | id    |
+-------+--------+-----------+-------+
|  5307 |   5123 | feed_news | 99999 |
| 25985 |   5211 | feed_news | 99998 |
| 15123 |    130 | feed_news | 99997 |
| 28368 |  19497 | feed_news | 99996 |
+-------+--------+-----------+-------+
4 rows in set (0.00 sec)

Дродиль, спасибо!

Ответ 1

Или вы могли бы сделать это, не заботясь о удаленных результатах, просто получите четвертое место перед данным идентификатором (6):

SELECT * FROM SomeTable WHERE id < 6 ORDER BY id DESC LIMIT 4,1

Ответ 2

4-я строка перед данной строкой или 4-й идентификатор перед данным ID? Возможно, идентификаторы отсутствуют из-за удаленных записей (то есть.. Идентификаторы 101, 102, 104, 105, 111,...)... Если вам просто нужен ID 4 меньше, чем какой-либо другой идентификатор по любой причине (я бы согласился здесь нужно больше информации, так как, вероятно, лучшее решение!), то вы можете просто сделать

SELECT * FROM SomeTable WHERE ID=6-4

Вы можете расширить это, если вы хотите, чтобы идентификатор 4 был меньше, чем идентификатор строки, содержащей определенное местоположение, с

SELECT * FROM SomeTable WHERE ID = (SELECT ID FROM SomeTable WHERE Location='Germany')-4

Но опять же, пожалуйста, поделитесь некоторыми примерами данных и тем, что вы пытаетесь достичь/почему вы планируете делать это таким образом - это не логичное решение. Если идентификатор 2 был удален, или если поле "Местоположение" не содержит уникальных данных, это будет прерываться. Должен быть лучший дизайн для того, что вы пытаетесь сделать, но вам нужно предоставить более подробную информацию.

Ответ 3

если мое поведение все еще работает, вам, вероятно, понадобится что-то вроде этого:

select t1.location, t2.location
from mytable t1
join mytable t2 on t2.id = t1.id - 4
where t1.location = 'some_location'

Ответ 4

Пожалуйста, добавьте ORDER BY id DESC в последний запрос, чтобы получить данные от последнего до первого.

ИЛИ

Для подтверждения заказа вы можете просто добавить ORDER BY id ASC.