2015-05-11 18 views
8

giả sử tôi có cơ sở dữ liệu, bảng chứa các hàng có id từ 1 đến 20.mysql - sắp xếp theo trường không hoạt động đúng

tôi muốn trả lại 3 hàng có id 3,4,1 trước và sau đó trả về các hàng khác. đây là mã của tôi:

SELECT id 
FROM prod 
ORDER BY field(id, 3, 4, 1) 
LIMIT 20 

này là kết quả của mã này:

id 
13 
17 
16 
15 
7 
6 
5 
2 
3 
4 
1 

lạ 3 hàng mà tôi cần phải đến trước đang hiển thị ở cuối,

Làm thế nào tôi có thể đưa 3 hàng này lên đầu danh sách?

Cảm ơn

Trả lời

6

Bạn có thể sử dụng desc:

SELECT id 
FROM prod 
ORDER BY field(id, 3, 4, 1) DESC 
LIMIT 20 

Vấn đề là MySQL đặt NULL giá trị đầu tiên khi bạn làm một thứ tự tăng dần bằng.

Nếu bạn thực sự muốn các hàng theo thứ tự 3, 4, 1 (mà câu hỏi là mơ hồ về yêu cầu này), sau đó đảo ngược chúng trong báo cáo kết quả field:

SELECT id 
FROM prod 
ORDER BY field(id, 1, 4, 3) DESC 
LIMIT 20 

Hoặc, nếu bạn muốn được ưa thích:

ORDER BY - field(id, 3, 4, 1) DESC 
+0

@sgtBOSE. . . Tôi không chắc chắn những gì bình luận được cho là. Điều đó đặt ba hàng ở đầu danh sách, đó là những gì OP đang yêu cầu. –

+0

Giải pháp hiện tại. :) –

0

Hãy thử với DESC

SELECT id 
FROM prod 
ORDER BY field(id, 3, 4, 1) DESC 
LIMIT 20 

Nó thấy ms thứ tự id của bạn là quan trọng. số ngược lại để có được kết quả chính xác

SELECT id 
FROM prod 
ORDER BY field(id, 1, 4, 3) DESC 
LIMIT 20 
1

Một cách khác là sử dụng case-when và đem lại cho mỗi id một order value

select * from prod 
order by 
case 
    when id = 3 then 0 
    when id=4 then 1 
    when id=1 then 2 
    else 3 
end,id 
limit 20 
; 
0

Không thử nghiệm nhưng bạn có thể thử

SELECT id, 
     (
      CASE 
       WHEN id = '3' THEN 0 
       WHEN id = '4' THEN 1 
       WHEN id = '1' THEN 2 
      END 
     ) as rank 
     FROM prod 
     ORDER BY rank 
     LIMIT 20; 
Các vấn đề liên quan