2012-03-06 36 views
11

Làm cách nào để chọn các hàng theo thứ tự ngược lại (DB MySQL)?Làm cách nào tôi có thể chọn các hàng theo thứ tự ngược lại (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'. 

Nội dung yêu cầu đối với mysql phải như thế nào?




Chỉnh sửa sau 30 phút sau đó.
Đây là giải pháp! Một số ví dụ, tôi đã kiểm tra đề xuất của 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, cảm ơn bạn!

+3

Tôi không chắc chắn những gì bạn đang cố gắng đạt được bằng cách chọn một hàng có ID 4 bên dưới ID đã được cung cấp. Vui lòng cung cấp thêm một số chi tiết vì tôi nghĩ rằng có khả năng là có giải pháp phù hợp hơn cho vấn đề của bạn. – aaroncatlin

+1

Bạn có thể làm rõ câu hỏi của mình, có lẽ bằng cách bao gồm một số dữ liệu mẫu và cách bạn muốn nó được đặt hàng? Tại thời điểm này, tôi không hiểu những gì bạn muốn làm. –

+1

Điều gì sẽ xảy ra nếu id của bạn tự động tăng lên và ai đó đã xóa id hàng 2 trong trường hợp của bạn, nó sẽ làm gì sau đó? Điều gì xảy ra nếu id được cung cấp là 2, sao cho bốn hàng trước sẽ có id -1 (không tồn tại)? –

Trả lời

20

Hoặc bạn có thể làm điều đó mà không quan tâm kết quả xóa, chỉ cần có được thứ tư trước khi id cho trước (6) bằng cách:

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

Hàng thứ 4 trước một hàng nhất định hoặc ID thứ 4 trước một ID đã cho? Có thể có ID bị thiếu do các bản ghi đã xóa (ví dụ: ID 101, 102, 104, 105, 111, ...) ... Nếu bạn chỉ muốn ID 4 ít hơn một số ID khác vì bất kỳ lý do nào (tôi sẽ đồng ý biết thêm nên được đưa ra ở đây, vì có khả năng là một giải pháp tốt hơn!) sau đó bạn chỉ có thể làm

SELECT * FROM SomeTable WHERE ID=6-4 

bạn có thể mở rộng trên rằng nếu bạn muốn ID 4 dưới ID của hàng chứa một địa điểm cụ thể với

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

Nhưng một lần nữa, xin chia sẻ một số dữ liệu mẫu và những gì bạn đang cố gắng để đạt được/lý do tại sao bạn đang lập kế hoạch để làm điều đó theo cách này - đây không phải là một giải pháp hợp lý. Nếu ID 2 đã bị xóa hoặc nếu trường Vị trí của bạn không chứa dữ liệu duy nhất - thì điều này sẽ bị hỏng. Phải có một thiết kế tốt hơn cho những gì bạn đang cố gắng làm, nhưng bạn cần phải cung cấp thêm chi tiết cho điều đó.

+0

Tôi đăng một câu trả lời tương tự lúc đầu, nhưng sau đó loại bỏ nó một lần nữa bởi vì điều này sẽ phá vỡ trong một số trường hợp. Xem nhận xét của tôi cho câu hỏi. –

+0

Vâng, tôi chắc chắn đồng ý - người dùng cần phải có quyền kiểm soát chặt chẽ DB để làm việc này, và thậm chí sau đó nó là một cách hoàn toàn khủng khiếp để làm/tiếp cận mọi thứ. Nhưng cho đến nay tôi có thể hiểu được câu hỏi với những gì được cung cấp này dường như là những gì anh ta yêu cầu. – maxx233

+0

xin lỗi, tôi đã không giải thích đầy đủ! Xem câu hỏi đã chỉnh sửa ở trên! –

1

nếu mindreading tôi vẫn làm việc, có thể bạn cần một cái gì đó như thế này:

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

Vui lòng thêm ORDER BY id DESC vào cuối truy vấn của bạn để tìm nạp dữ liệu từ đầu đến cuối.

HOẶC

Đối assenting để bạn có thể dễ dàng thêm ORDER BY id ASC.

Các vấn đề liên quan