2012-03-06 66 views
11

如何以相反顺序选择行(DB MySQL)?如何以相反顺序选择行(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的请求内容应该是什么样的?




Editted在30 minut以后。
这里是解决方案! 一些例子,我查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,谢谢!

+3

我不确定你想通过选择一个ID为4以下的ID所提供的ID来实现。 请提供更多详细信息,因为我认为您的问题可能存在更合适的解决方案。 – aaroncatlin 2012-03-06 11:09:15

+1

你能澄清一下你的问题吗,也许你可以通过包括一些样本数据以及你想如何定购?目前,我不明白你想要做什么。 – 2012-03-06 11:10:15

+1

如果你的ID是自动递增的,并且有人已经删除了你的案例中的行ID 2,那么会发生什么?如果提供的id是2,会发生什么情况,因此之前的四行会有id -1(不存在)? – 2012-03-06 11:13:11

回答

20

或者你可以做到这一点,而不必考虑删除的结果,只是给定的ID(6)之前获得第四名:

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

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

SELECT * FROM SomeTable WHERE ID=6-4 

可以扩大,如果你想要的ID比列包含与特定位置的ID 4少

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

但再次,请分享一些示例数据以及你想达到/为什么你打算做这样的东西 - 这是不是一个合理的解决方案。如果ID 2已被删除,或者您的位置字段不包含唯一数据 - 则会中断。对于你想要做的事情,必须有更好的设计,但是你需要提供更多的细节。

+0

我首先发布了类似的答案,但之后又将其删除,因为这会在多个案例中破解。看到我对这个问题的评论。 – 2012-03-06 11:14:31

+0

是的,我当然同意 - 用户需要对数据库进行严格控制才能发挥作用,即使这样做也是一种完全可怕的方式来处理/处理事情。但就我所能理解的问题而言,这似乎是他所要求的。 – maxx233 2012-03-06 11:22:06

+0

对不起,我没有完全解释!看到上面编辑的问题! – 2012-03-06 11:23:12

1

如果我的mindreading仍在工作,你可能需要的东西是这样的:由

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

请在最后的查询中加上ORDER BY id DESC以将数据从最后一位提取到第一位。

OR

对于同意的顺序,你可以简单地添加ORDER BY id ASC