Поскольку SELECT является атомарной операцией, я не думаю, что есть простое решение.Я также вижу две разные проблемы, которые необходимо решить:
выбор одной строки без повторения показанной.В основном вам нужно хранить последнюю строку, показанную где-то.Если у вас есть какое-либо приложение, которое хранит текущее состояние, это может быть вариант, чтобы сохранить его как внешнюю переменную.Набросанное решение выполняется в MySQL 5.0 +:
Сначала подготовьте оператор, который будет выполнен позже, и установите начальную позицию для запроса:
PREPARE STMT FROM 'SELECT id, name FROM customer LIMIT ?, 1';
SET @pos = 0;
Возможно, вы захотите добавитьпо умолчанию заказ, чтобы получить надежный результат.Каждый раз, когда вы хотите получить одну строку, выполняйте оператор как
EXECUTE STMT USING @pos;
SELECT count(*) FROM customer INTO @max;
SET @pos=(@pos+1)%@max;
Другое дело, что вы хотите прочитать случайную позицию.Единственное решение, которое я вижу прямо сейчас, - это создать временную таблицу, в которой либо хранится контент от заказчика, упорядоченного случайным образом, либо создать временную таблицу, содержащую все числа от 0 до @ max, и прочитать текущую позицию в основной таблице.из временного стола.Если у вас есть приложение вне MySQL, возможно, есть более элегантные способы решения этой проблемы.