sql >> Databáze >  >> RDS >> Mysql

Jak vybírat záznamy jeden po druhém bez opakování

Vzhledem k tomu, že SELECT je atomická operace, nemyslím si, že existuje snadné řešení. Také vidím dva různé problémy, které je třeba vyřešit:

výběr jednoho řádku bez opakování zobrazeného řádku. V zásadě musíte někde uložit poslední zobrazený řádek. Pokud máte nějakou aplikaci, která ukládá aktuální stav, může být možností uložit jej jako externí proměnnou. Načrtnuté řešení je provedeno v MySQL 5.0+:

Nejprve připravte příkaz, který bude proveden později, a nastavte počáteční pozici pro dotaz:

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

Možná budete chtít přidat výchozí uspořádání, abyste získali spolehlivý výsledek. Pokaždé, když chcete získat jeden řádek, proveďte příkaz do

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

Další věc je, že chcete číst náhodnou pozici. Jediné řešení, které právě teď vidím, je vytvořit dočasnou tabulku, která bude obsahovat obsah od zákazníka objednaného náhodně, nebo vytvoříte dočasnou tabulku obsahující všechna čísla z 0[email protected] a přečtěte si aktuální pozici v hlavní tabulce z dočasné tabulky. Pokud máte aplikaci mimo MySQL, mohou existovat elegantnější způsoby, jak to vyřešit.



  1. Zkontrolujte nastavení relace pomocí SESSIONPROPERTY() na serveru SQL Server

  2. Chyba syntaxe MySQL ON DUPLICATE KEY UPDATE

  3. Dynamický odkaz MySQL pro načtení správného řádku

  4. Chyba vytvoření tabulky PHP 1064