Truy vấn của bạn chống lại tiêu chuẩn sql vì bạn liệt kê các cột trong danh sách chọn mà bạn không liệt kê trong nhóm theo mệnh đề, cũng không phải là đối tượng của một hàm tổng hợp, chẳng hạn như count (). MySQL cho phép chức năng này trong các cài đặt chế độ sql nhất định.
Tuy nhiên, ngay cả khi chức năng này được bật, MySQL vẫn có hạn chế về dữ liệu được chọn từ các trường không được tổng hợp :
Vì vậy, thay vì sử dụng nhóm theo, hãy sử dụng sắp xếp và mệnh đề giới hạn để giới hạn đầu ra:
select * from job
where type = 1
order by rand()
limit 1
Cũng xin lưu ý rằng phương pháp lựa chọn ngẫu nhiên này rất tốn tài nguyên, vì MySQL trước tiên phải sắp xếp toàn bộ tập kết quả mà không sử dụng bất kỳ chỉ mục nào. Có những cách khác để chọn ngẫu nhiên dữ liệu từ một bảng mà không cần sử dụng order by rand()
.