Как я могу выбрать строки в обратном порядке (MySQL) - PullRequest
14 голосов
/ 06 марта 2012

Как выбрать строки в обратном порядке (БД 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)

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

Ответы [ 4 ]

22 голосов
/ 06 марта 2012

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

SELECT * FROM SomeTable WHERE id < 6 ORDER BY id DESC LIMIT 4,1
2 голосов
/ 06 марта 2012

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

SELECT * FROM SomeTable WHERE ID=6-4

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

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

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

1 голос
/ 01 сентября 2016

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

OR

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

1 голос
/ 06 марта 2012

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

select t1.location, t2.location
from mytable t1
join mytable t2 on t2.id = t1.id - 4
where t1.location = 'some_location'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...