Yêu cầu thg 1 9, 2021 7:14 SA 97 0 3
  • 97 0 3
+1

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

Chia sẻ
  • 97 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 CÂU TRẢ LỜI


Đã trả lời thg 1 9, 2021 7:18 SA
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)

Chia sẻ
Avatar TAMIX @tuananhbfs
thg 1 9, 2021 7:31 SA

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 ?

Avatar TAMIX @tuananhbfs
thg 1 9, 2021 7:41 SA

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

Đã trả lời thg 1 11, 2021 1:26 SA
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

Chia sẻ
Avatar TAMIX @tuananhbfs
thg 1 11, 2021 3:42 SA

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.

Avatar TAMIX @tuananhbfs
thg 1 11, 2021 3:45 SA

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

Chẳng hạn như vậy

Avatar Dương Mạnh Hoàng @duong.manh.hoang
thg 1 11, 2021 5:08 SA

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

Avatar TAMIX @tuananhbfs
thg 1 11, 2021 6:35 SA

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

Đã trả lời thg 1 14, 2021 12:51 SA
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

Chia sẻ
Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí