Как выбрать записи по одной без повторения - PullRequest
2 голосов
/ 03 сентября 2010
select id, name from customer order by random() limit 5;

Приведенный выше запрос выбирает случайные записи.Однако это повторяет строки.Я просто хочу выбрать одну строку каждый раз, не повторяя.Скажем, у меня есть идентификатор от 1 до 5. В первый раз я хочу выбрать 1, второй раз, когда запрос отображает 2, затем 3,4 и 5. Как только последовательность завершена, она начинается снова с 1.

Ответы [ 2 ]

0 голосов
/ 03 сентября 2010

Поскольку 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, возможно, есть более элегантные способы решения этой проблемы.

0 голосов
/ 03 сентября 2010
$query= "select id, name from customer order by id limit ".rand(1,5).",1"

Подробнее об использовании лимита читайте здесь: http://dev.mysql.com/doc/refman/5.0/en/select.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...