如何以相反的顺序选择行(mysql)

时间:2012-03-06 11:05:22

标签: mysql sql

如何以相反的顺序选择行(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分钟后编辑。
这是解决方案! 举个例子,我检查了drodil的建议:

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)

Drodil,谢谢!

4 个答案:

答案 0 :(得分:22)

或者你可以在不关心删除的结果的情况下做到这一点,只需在给定的id(6)之前得到第四个:

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

答案 1 :(得分:2)

给定行之前的第4行,或给定ID之前的第4行?由于删除的记录可能会丢失ID(即.. ID 101,102,104,105,111,......)......如果您因任何原因只想要一个ID小于其他ID的ID(我会同意)这里应该给出更多信息,因为可能有更好的解决方案!)那么你可以简单地做到

SELECT * FROM SomeTable WHERE ID=6-4

如果您希望ID 4小于包含特定位置的行ID,则可以展开

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

但是,请再次分享一些示例数据以及您要实现的目标/为什么计划这样做 - 这不是一个合理的解决方案。如果ID 2已被删除,或者您的位置字段不包含唯一数据 - 那么这将会中断。必须有一个更好的设计,你想要做什么,但你需要提供更多细节。

答案 2 :(得分:1)

如果我的思维仍然有效,你可能需要这样的东西:

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

答案 3 :(得分:1)

请在您的查询的最后一位添加ORDER BY id DESC,以便从最后一个获取数据。

对于同意订单,您只需添加ORDER BY id ASC