Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak wybierać rekordy jeden po drugim bez powtarzania?

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Porównaj dwie bazy danych MySQL

  2. Jak sprawdzić, czy kolumna jest pusta lub null w MySQL?

  3. Ostrzeżenie:mysqli_query() oczekuje, że parametr 1 to mysqli, zasób podany

  4. Ogranicz wyniki z tabeli połączonej do jednego wiersza

  5. Skrypt PHP do importowania danych csv do mysql