如何以相反的顺序选择行(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,谢谢!
答案 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
。