Eftersom SELECT är en atomoperation tror jag inte att det finns en enkel lösning. Jag ser också två olika problem som måste lösas:
välja en enda rad utan att upprepa en visad rad. I grund och botten måste du lagra den sista raden som visas någonstans. Om du har något program som lagrar det aktuella tillståndet kan det vara ett alternativ att spara det som en extern variabel. Den skissade lösningen är gjord i MySQL 5.0+:
Förbered först en sats som kommer att köras senare och ställ in en initial position för frågan:
PREPARE STMT FROM 'SELECT id, name FROM customer LIMIT ?, 1';
SET @pos = 0;
Du kanske vill lägga till en standardordning för att få ett tillförlitligt resultat. Varje gång du vill få en enstaka rad, kör satsen med
EXECUTE STMT USING @pos;
SELECT count(*) FROM customer INTO @max;
SET @pos=(@pos+1)%@max;
Den andra saken är att du vill läsa en slumpmässig position. Den enda lösningen som jag ser just nu är att skapa en tillfällig tabell som antingen innehåller innehållet från kunden slumpmässigt eller att du skapar en tillfällig tabell som innehåller alla nummer från 0[email protected] och läs den aktuella positionen i huvudtabellen från den tillfälliga tabellen. Om du har en applikation utanför MySQL kan det finnas mer eleganta sätt att lösa detta på.