Asked Jan 9th, 7:14 AM 52 0 3
  • 52 0 3
+1

Mysql<Laravel>, Làm cách nào để Order by theo ý muốn khi dùng IN()

Share
  • 52 0 3

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 ANSWERS


Answered Jan 9th, 7:18 AM
0

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)

Share
Lê Tuấn Anh @tuananhbfs
Jan 9th, 7:31 AM

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 ?

0
| Reply
Share
Lê Tuấn Anh @tuananhbfs
Jan 9th, 7:41 AM

phía trên mình chỉ lấy ví dụ thôi

0
| Reply
Share
Answered Jan 11th, 1:26 AM
0

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

Share
Lê Tuấn Anh @tuananhbfs
Jan 11th, 3:42 AM

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.

0
| Reply
Share
Lê Tuấn Anh @tuananhbfs
Jan 11th, 3:45 AM

| id | product_id | status_id | promotion_id | title | date |

Chẳng hạn như vậy

0
| Reply
Share
Dương Mạnh Hoàng @duong.manh.hoang
Jan 11th, 5:08 AM

@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?

0
| Reply
Share
Lê Tuấn Anh @tuananhbfs
Jan 11th, 6:35 AM

@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.

0
| Reply
Share
Answered Jan 14th, 12:51 AM
0

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

Share