sql >> Database >  >> RDS >> Mysql

Hoe records één voor één te selecteren zonder te herhalen

Aangezien SELECT een atomaire operatie is, denk ik niet dat er een gemakkelijke oplossing is. Ik zie ook twee verschillende problemen die moeten worden opgelost:

het selecteren van een enkele rij zonder een getoonde te herhalen. In principe moet je de laatst getoonde regel ergens opslaan. Als je een applicatie hebt die de huidige status opslaat, kan het een optie zijn om deze op te slaan als een externe variabele. De geschetste oplossing is gemaakt in MySQL 5.0+:

Bereid eerst een instructie voor die later zal worden uitgevoerd en stel een beginpositie in voor de query:

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

Misschien wilt u een defautl-volgorde toevoegen om een ​​betrouwbaar resultaat te krijgen. Elke keer dat u een enkele rij wilt krijgen, voert u de instructie uit met

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

Het andere is dat je een willekeurige positie wilt lezen. De enige oplossing die ik nu zie, is om een ​​tijdelijke tabel te maken die ofwel de inhoud van de klant willekeurig geordend bevat of dat je een tijdelijke tabel maakt met alle nummers van 0[email protected] en lees de huidige positie in de hoofdtabel uit de tijdelijke tabel. Als je een applicatie buiten MySQL hebt, zijn er misschien elegantere manieren om dit op te lossen.



  1. Join Elimination:wanneer SQL Server onnodige tabellen verwijdert

  2. Verwijder alle externe sleutels in de database (MySql)

  3. Een API aanroepen vanuit de opgeslagen procedure van SQL Server

  4. Wat is het verschil tussen RANK en DENSE_RANK in SQL?