2010-05-11 43 views
12

Có cách nào để giữ lệnh khi sử dụng SELECT WHERE IN()? Ví dụ: sử dụng truy vấn sau:Làm thế nào để bạn giữ lệnh bằng cách sử dụng SELECT WHERE IN()?

SELECT id FROM data_table WHERE id IN(56,55,54,1,7); 

Kết quả sẽ trở lại bằng cách sử dụng thứ tự mặc định bằng id. 1,7,54,55,56

Khi tôi muốn giữ trật tự được sử dụng trong IN: 56,55,54,1,7

Có một cách nhanh chóng để làm điều này trong mySQL hoặc sẽ Tôi bị buộc phải ra lệnh sau mã.

Cảm ơn :)

Trả lời

37

Sử dụng FIND_IN_SET:

ORDER BY FIND_IN_SET(id, '56,55,54,1,7') 
+0

+1 - Tôi chưa bao giờ nghĩ về điều đó. Ý tưởng hay –

+0

Xin cảm ơn! Nhanh quá. Nó hoạt động hoàn hảo :) – Pepper

+0

Một câu hỏi, điều này làm cho truy vấn sử dụng một filesort. Tôi có nên quan tâm đến hiệu suất sử dụng phương pháp này không? Hay đây là một câu hỏi cho một chủ đề khác? – Pepper

0

Bạn có thể làm một UNION, mà có thể trả lại trật tự theo cùng một cách.

NHƯNG:

Tại sao không chỉ ứng dụng của bạn sắp xếp lại kết quả khi nhận được, thay vì buộc DB thực hiện?

+2

DB sẽ mở rộng thứ tự tốt hơn nhiều so với ứng dụng của bạn. 10 bản ghi là không có gì - nếu tập hợp kết quả là 10.000 hay hàng triệu? –

2
+0

điều này không hoạt động như mong đợi thứ tự của danh sách được chuyển qua không được tôn trọng trong trường hợp danh sách có thứ tự hỗn hợp (không phải tất cả crescent hoặc descrescent), 'FIND_IN_SET' thay vì tôn trọng thứ tự chính xác của danh sách – WonderLand

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