sql >> Base de Datos >  >> RDS >> Mysql

Cómo seleccionar registros uno por uno sin repetir

Dado que SELECT es una operación atómica, no creo que haya una solución fácil. También veo dos problemas diferentes que deben resolverse:

seleccionando una sola fila sin repetir una mostrada. Básicamente, debe almacenar la última línea mostrada en algún lugar. Si tiene alguna aplicación que almacene el estado actual, podría ser una opción guardarlo como una variable externa. La solución esbozada se realiza en MySQL 5.0+:

Primero prepare una declaración que se ejecutará más adelante y establezca una posición inicial para la consulta:

PREPARE STMT FROM 'SELECT id, name FROM customer LIMIT ?, 1';
SET @pos = 0;

Es posible que desee agregar un orden predeterminado para obtener un resultado confiable. Cada vez que desee obtener una sola fila, ejecute la instrucción mediante

EXECUTE STMT USING @pos; 
SELECT count(*) FROM customer INTO @max; 
SET @pos=(@pos+1)%@max;

La otra cosa es que quieres leer una posición aleatoria. La única solución que veo en este momento es crear una tabla temporal que contenga el contenido del cliente ordenado al azar o crear una tabla temporal que contenga todos los números desde 0[email protected] y leer la posición actual en la tabla principal de la tabla temporal. Si tiene una aplicación fuera de MySQL, puede haber formas más elegantes de resolver esto.