2014-10-03 21 views
6

Tôi có hai truy vấn, truy vấn đầu tiên cung cấp cho tôi một mảng các id, theo thứ tự cụ thể. Sau đó, rằng mảng của id tôi vượt qua nó để truy vấn thứ hai như vậy:Laravel MySQL cách sắp xếp các kết quả theo thứ tự như trong khoản

Operation::whereIn('id', $ids)->get(); 

Nhưng khi tôi ra kết quả của truy vấn đó, thứ tự đã thay đổi, nếu mảng $ id là một cái gì đó tương tự (4,2, 6,9) đó là thứ tự tôi muốn kết quả được đưa vào, đầu ra sẽ cho tôi 2,4,6,9. Làm thế nào tôi có thể tránh điều đó?

Trả lời

9

MySQL cách sắp xếp với thứ tự như trong where in khoản:

$ids; // array of ids 
$placeholders = implode(',',array_fill(0, count($ids), '?')); // string for the query 

Operation::whereIn('id', $ids) 
    ->orderByRaw("field(id,{$placeholders})", $ids)->get(); 
+0

mmh, không thực sự làm việc, không biết tại sao –

+0

Đúng, id được xử lý như chuỗi đơn. Bây giờ thì ổn rồi –

3

Bạn có thể làm

$idsImploded = implode(',',$ids); 
Operation::whereIn('id', $ids)->orderByRaw("FIND_IN_SET('id','$idsImploded')")->get(); 

Đó là một vấn đề mà MySql không trả lại kết quả theo thứ tự bạn xác định chúng, vì vậy bạn cần phải sắp xếp lại chúng sau đó.

Một giải pháp tương tự có thể được tìm thấy ở đây: avoid Sorting by the MYSQL IN Keyword

+0

Cú pháp lỗi hoặc vi phạm truy cập: 1582 số thông số không chính xác trong lời kêu gọi có nguồn gốc chức năng 'FIND_IN_SET' (SQL: select * từ ' hoạt động' trong đó 'id' trong (42, 3, 4, 37, 16, 38, 39, 14, 17) theo thứ tự FIND_IN_SET (id, 42,3,4,37,16,38,39,14,17)) –

+0

Đã sửa lỗi. Tôi quên thêm '' vào đối số FIND_IN_SET. –

1

Nếu bạn có thứ tự sắp xếp trong 4,2,6,9, bạn có thể lấy những hàng này, sau đó sử dụng php để sắp xếp.

+0

Tôi cần để có thể sử dụng hùng hồn sau này để có thêm thông tin từ các bảng liên quan đến Hoạt động, làm thế nào tôi có thể sắp xếp objet được trả về bởi truy vấn đó mà không làm mất khả năng đó? –

+0

Như trong quan điểm của tôi, tôi muốn thực hiện $ operation-> event-> name, trong đó sự kiện là một bảng liên quan và hoạt động là những gì xuất phát từ truy vấn trong câu hỏi của tôi. –

+0

bạn có thể đặt tất cả các thông tin đầu tiên sau đó sắp xếp – ajreal

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