Lỗi truy vấn CSDL mySQL khi dùng ORDERBY và GROUP BY với nhau trên linux và windown
Khi bê project từ windown sang linux thì lỗi. Mình đang gặp lỗi với câu lệnh truy vấn lấy dữ liệu từ database ra:
select post_id from comments group by post_id order by created_at desc limit 5 offset 0
với câu lệnh trên ,trên windown mình truy vấn bình thường:
Còn trên linux mình lại bị lỗi. phải bỏ một trong hai hàm :
order by
hoặc group by
đi.Đây là code mình lấy dữ liệu trên laravel(PHP):
Comment::select('post_id')->groupBy('post_id')->orderBy('created_at','desc')->paginate(5);
Ý mình là muốn lấy ra id với dữ liệu được sắp xếp từ mới đến cũ nhất và lấy một id( cột đó có nhiều id như thế).
Bác nào có ý kiến gì giúp mình với.
Thanks.
Theo mình lỗi này không liên quan gì đến môi trường Linux hay Windows mà nằm ở cấu hình của mysql server.
Bạn có thể tham khảo link: https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html.
Bạn kiểm tra sql_mode trên máy windows set lại cho mysql trên linux là được, mình đoán chỉ cần disable ONLY_FULL_GROUP_BY ở mysql trên máy linux.
Đừng dùng cách disable only_full_group_by, vì có khi đưa lên host nó không cho chỉnh sql_mode là méo mặt.
Theo như nó ghi thì bạn thiếu cột
created_at
trong phần select.Đúng rồi đấy, nếu muốn chỉnh các tham số của database thì phải có quyền DBA trên server. Vì thế khi cần động đến các tham số là phải cân nhắc kỹ.
trước câu lệnh lấy dữ liệu minh chèn lệnh này vào
SET sql_mode = '';
thì được. mà nêú disable nó server có ảnh hưởng gì không nhỉ hay có ảnh hưởng đến câu lệnh khác ko ý.?MySql khuyến cáo là nên để mặc định nó enable:
https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sql-mode-changes