Mysql
 sql >> Database >  >> RDS >> Mysql

Come selezionare i record uno per uno senza ripetere

Poiché SELECT è un'operazione atomica, non credo che ci sia una soluzione facile. Vedo anche due diversi problemi che devono essere risolti:

selezionando una singola riga senza ripeterne una mostrata. Fondamentalmente devi memorizzare l'ultima riga mostrata da qualche parte. Se si dispone di un'applicazione che memorizza lo stato corrente, potrebbe essere un'opzione salvarla come variabile esterna. La soluzione disegnata viene eseguita in MySQL 5.0+:

Per prima cosa prepara un'istruzione che verrà eseguita in seguito e imposta una posizione iniziale per la query:

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

Potresti voler aggiungere un ordinamento predefinito per ottenere un risultato affidabile. Ogni volta che vuoi ottenere una singola riga, esegui l'istruzione

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

L'altra cosa è che vuoi leggere una posizione casuale. L'unica soluzione che vedo in questo momento è creare una tabella temporanea che contenga il contenuto del cliente ordinato in modo casuale o che crei una tabella temporanea contenente tutti i numeri da 0[email protected] e leggere la posizione corrente nella tabella principale dalla tabella temporanea. Se hai un'applicazione al di fuori di MySQL, potrebbero esserci modi più eleganti per risolvere questo problema.