Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como selecionar registros um por um sem repetir


Como SELECT é uma operação atômica, não acho que exista uma solução fácil. Também vejo dois problemas diferentes que precisam ser resolvidos:

selecionando uma única linha sem repetir uma mostrada. Basicamente você precisa armazenar a última linha mostrada em algum lugar. Se você tiver algum aplicativo que armazene o estado atual, pode ser uma opção salvá-lo como uma variável externa. A solução esboçada é feita no MySQL 5.0+:

Primeiro prepare uma instrução que será executada posteriormente e defina uma posição inicial para a consulta:
PREPARE STMT FROM 'SELECT id, name FROM customer LIMIT ?, 1';
SET @pos = 0;

Você pode querer adicionar uma ordenação padrão para obter um resultado confiável. Cada vez que você quiser obter uma única linha, execute a instrução por
EXECUTE STMT USING @pos; 
SELECT count(*) FROM customer INTO @max; 
SET @pos=(@pos+1)%@max;

A outra coisa é que você quer ler uma posição aleatória. A única solução que vejo agora é criar uma tabela temporária que contenha o conteúdo do cliente ordenado aleatoriamente ou que você crie uma tabela temporária contendo todos os números de 0[email protected] e leia a posição atual na tabela principal da tabela temporária. Se você tiver um aplicativo fora do MySQL, pode haver maneiras mais elegantes de resolver isso.