Vì SELECT là một hoạt động nguyên tử, tôi không nghĩ rằng có một giải pháp dễ dàng. Tôi cũng thấy hai vấn đề khác nhau cần được giải quyết:
chọn một hàng đơn lẻ mà không lặp lại một hàng được hiển thị. Về cơ bản, bạn cần phải lưu trữ dòng cuối cùng được hiển thị ở đâu đó. Nếu bạn có một số ứng dụng lưu trữ trạng thái hiện tại, nó có thể là một tùy chọn, để lưu nó dưới dạng một biến bên ngoài. Giải pháp phác thảo được thực hiện trong MySQL 5.0+:
Đầu tiên, hãy chuẩn bị một câu lệnh sẽ được thực thi sau này và đặt vị trí ban đầu cho truy vấn:
PREPARE STMT FROM 'SELECT id, name FROM customer LIMIT ?, 1';
SET @pos = 0;
Bạn có thể muốn thêm một thứ tự defautl để có được kết quả đáng tin cậy. Mỗi lần bạn muốn nhận được một hàng, hãy thực hiện câu lệnh trước
EXECUTE STMT USING @pos;
SELECT count(*) FROM customer INTO @max;
SET @pos=(@pos+1)%@max;
Điều khác là bạn muốn đọc một vị trí ngẫu nhiên. Giải pháp duy nhất mà tôi thấy lúc này là tạo một bảng tạm thời chứa nội dung từ khách hàng đã đặt hàng ngẫu nhiên hoặc bạn tạo một bảng tạm thời chứa tất cả các số từ 0 [email protected] và đọc vị trí hiện tại trong bảng chính từ bảng tạm thời. Nếu bạn có một ứng dụng bên ngoài MySQL, có thể có nhiều cách đơn giản hơn để giải quyết vấn đề này.