2012-03-06 50 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