Mysql<Laravel>, Làm cách nào để Order by theo ý muốn khi dùng IN()
Chào các bạn, mình muốn hỏi 1 vấn đề liên quan đến truy vấn Where In như sau:
SELECT product_id ,title, date FROM Table WHERE product_id in (7,1,5,9,3) order by date desc
Và nó trả về kết quả sắp xếp theo "product_id" trước rồi mới đến "date".
product_id | title | date |
---|---|---|
7 | B | 23-05-20 |
7 | B | 21-05-20 |
7 | D | 20-05-20 |
1 | E | 22-05-20 |
1 | E | 21-05-20 |
1 | C | 20-05-20 |
1 | C | 20-05-20 |
Có cách nào để nó chỉ ưu tiên sắp xếp theo "date" không?
product_id | title | date |
---|---|---|
7 | B | 23-05-20 |
1 | E | 22-05-20 |
7 | B | 21-05-20 |
1 | E | 21-05-20 |
7 | D | 20-05-20 |
1 | C | 20-05-20 |
1 | C | 20-05-20 |
<Mình có thể lấy kết quả về rồi sort lại 1 lần bằng php, nhưng muốn tìm hiểu xem Mysql làm bằng cách nào>
Xin cảm ơn.
3 CÂU TRẢ LỜI
Mình thấy query đúng mà nhỉ. Date bạn lưu created date à ?
Try:
order by field(id,7,1,5,9,3)
không phải bị lỗi bạn ơi. Mình muốn hỏi xem liệu có cách nào để kết quả trả về ko bị ép sắp xếp theo "id" không ?
phía trên mình chỉ lấy ví dụ thôi
cho mình hỏi một cái trước là tại sao dữ liệu của bạn ID giống nhau mà các cột khác lại có giá trị khác nhau vậy
Có lẽ mình viết là "id" nên gây hiểu lầm. Mình xin sửa lại là product_id. Đây là 1 table quan hệ phức tạp giữa nhiều table khác.
| id | product_id | status_id | promotion_id | title | date |
Chẳng hạn như vậy
@tuananhbfs mình cũng vừa thử với 1 bảng cấu trúc tương tự như bạn (nó có 1 foreign key và cột lưu ngày tạo). Mình có thử order theo ngày tạo thi vẫn thấy được bình thường. Liệu có khi nào do 1 câu query khác ảnh hưởng tới kết quả cuối cùng của bạn k?
@duong.manh.hoang "WHERE product_id in (7,1,5,9,3) order by date desc" cái đoạn này dường như nó tương đương với query 5 lần
product_id =7 order by date desc | product_id =1 order by date desc | product_id =5 order by date desc | product_id =9 order by date desc | product_id =4 order by date desc rồi gộp các kết quả lại với nhau.
Bạn thử tạo 1 view trong mysql xem được không CREATE VIEW view_table_product AS SELECT product_id ,title, date FROM table ORDER BY date DESC
Sau đó thì query trong cái View đó thôi
Ở đây mình bỏ qua vấn đề về đồng bộ dữ liệu từ bảng chính đến cái view hay là performance của việc đồng bộ =))
P/s: Mình nghĩ có thể sử dụng trigger để update lại dữ liệu cho View