Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment sélectionner les enregistrements un par un sans répéter

Étant donné que SELECT est une opération atomique, je ne pense pas qu'il existe une solution simple. Je vois également deux problèmes différents qui doivent être résolus :

sélectionner une seule ligne sans répéter celle affichée. Fondamentalement, vous devez stocker la dernière ligne affichée quelque part. Si vous avez une application qui stocke l'état actuel, il peut être possible de l'enregistrer en tant que variable externe. La solution esquissée est réalisée dans MySQL 5.0+ :

Préparez d'abord une instruction qui sera exécutée plus tard et définissez une position initiale pour la requête :

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

Vous voudrez peut-être ajouter un ordre par défaut pour obtenir un résultat fiable. Chaque fois que vous souhaitez obtenir une seule ligne, exécutez l'instruction en

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

L'autre chose est que vous voulez lire une position aléatoire. La seule solution que je vois en ce moment, est de créer une table temporaire qui contient soit le contenu du client commandé au hasard, soit de créer une table temporaire contenant tous les nombres à partir de 0[email protected] et lire la position actuelle dans la table principale à partir de la table temporaire. Si vous avez une application en dehors de MySQL, il existe peut-être des moyens plus élégants de résoudre ce problème.