Ponieważ SELECT jest operacją atomową, nie sądzę, aby istniało proste rozwiązanie. Widzę też dwa różne problemy, które należy rozwiązać:
wybranie pojedynczego wiersza bez powtarzania pokazanego. Zasadniczo musisz gdzieś zapisać ostatnią pokazaną linię. Jeśli masz jakąś aplikację, która przechowuje aktualny stan, może być opcja, aby zapisać ją jako zmienną zewnętrzną. Naszkicowane rozwiązanie zostało wykonane w MySQL 5.0+:
Najpierw przygotuj instrukcję, która zostanie wykonana później i ustaw początkową pozycję zapytania:
PREPARE STMT FROM 'SELECT id, name FROM customer LIMIT ?, 1';
SET @pos = 0;
Możesz dodać domyślną kolejność, aby uzyskać wiarygodny wynik. Za każdym razem, gdy chcesz uzyskać pojedynczy wiersz, wykonaj instrukcję przez
EXECUTE STMT USING @pos;
SELECT count(*) FROM customer INTO @max;
SET @pos=(@pos+1)%@max;
Inną rzeczą jest to, że chcesz czytać losową pozycję. Jedynym rozwiązaniem, które teraz widzę, jest utworzenie tabeli tymczasowej, która albo przechowuje zawartość od klienta zamówioną losowo, albo utworzenie tabeli tymczasowej zawierającej wszystkie liczby z 0przykł[email protected] i odczytaj aktualną pozycję w tabeli głównej z tabeli tymczasowej. Jeśli masz aplikację poza MySQL, mogą istnieć bardziej eleganckie sposoby rozwiązania tego problemu.