[Laravel] Hỏi về sort dữ liệu trong Laravel
Chào anh em, chúc anh em 1 ngày làm việc vui vẻ !
Mình đang có 1 vấn đề như sau: ban đầu yêu cầu là lấy tất cả bản ghi của table A và order by theo created_at, các trường là (title, code, created_at). Và yêu cầu mới là các bản ghi có title chứa ký tự "VIP" thì xếp lên trên, tức là sẽ thành 2 cụm, cụm trên gồm các title chứa "VIP", cụm dưới thì không. Tuy nhiên cả 2 cụm đều vẫn phải được order by theo created_at.
Mình muốn hỏi là có kỹ thuật query nào trong Laravel làm được cái này nhanh không ? Hay mình phải union trong SQL (hoặc sort lại 1 phát nữa = php sau khi query Laravel ) ? Anh em cho mình xin giải pháp, hoặc là keyword để mình sợt nhé Tks kiu !
2 CÂU TRẢ LỜI
Mình nghĩ là bạn có sử dụng dụng ORDER BY trong query như bình thường. Giả sử bạn có một list các jobs. Bạn thêm một field cho mỗi job để biết job có là VIP hay ko. Nếu là VIP thì ưu tiên được xếp ở đầu danh sách. Vậy hãy thêm order by field đó ở cuối cùng để cho VIP lên đầu danh sách kết quả trả về. Hoặc là select ra một field check VIP rồi order theo nó ở cuối cùng.
SELECT
title, code, created_at, is_vip
FROM jobs
ORDER BY
title DESC,
created_at DESC,
is_vip DESC
Bạn hãy thử xem nhé!
@manhtqb @huukimit Ý tưởng đưa thêm trường is_vip của bạn Kim trả lời ở trước là hợp lý tuy nhiên các order có vẻ hơi nhầm lẫn? Nếu bạn muốn cho VIP lên đầu danh sách thì cần phải ORDER theo nó đầu tiên chứ không phải cuối cùng. Hiểu đơn giản nếu viết trên cùng một dòng thì MySQL sẽ xem xét thứ tự ưu tiên câu truy vấn sau Order by sẽ là từ trái qua phải. Demo: http://sqlfiddle.com/#!9/f74396d/5