Asked Jan 9th, 2021 7:14 a.m. 89 0 3
  • 89 0 3
+1

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

Share
  • 89 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, 2021 7:18 a.m.
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
Avatar TAMIX @tuananhbfs
Jan 9th, 2021 7:31 a.m.

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
Avatar TAMIX @tuananhbfs
Jan 9th, 2021 7:41 a.m.

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

0
| Reply
Share
Answered Jan 11th, 2021 1:26 a.m.
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
Avatar TAMIX @tuananhbfs
Jan 11th, 2021 3:42 a.m.

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
Avatar TAMIX @tuananhbfs
Jan 11th, 2021 3:45 a.m.

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

Chẳng hạn như vậy

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

@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
Avatar TAMIX @tuananhbfs
Jan 11th, 2021 6:35 a.m.

@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, 2021 12:51 a.m.
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
Viblo
Let's register a Viblo Account to get more interesting posts.