Zní to, jako byste mohli chtít pár náhodně vybraných slov ze slovníku . Je to trochu těžké říct, vzhledem k nejasnosti otázky.
NÁHODNÁ SLOVNÍKOVÁ SLOVA
Nejlepší způsob, jak vybrat náhodná slova ze slovníku, je pravděpodobně na konci PHP pomocí generátoru přístupových frází, který to udělá za vás.
Můžete to udělat v PostgreSQL pomocí tabulky dictionary
jedním word
na řádek, ačkoli:
SELECT word FROM dictionary ORDER BY random() LIMIT 2;
Výkon bude s velkým slovníkem opravdu příšerný. Lze to udělat mnohem rychleji, pokud se slovník nezmění a bude tam jedinečné word_id
bez mezer v číslování, což vám umožní psát:
CREATE OR REPLACE FUNCTION get_random_word() RETURNS text AS $$
SELECT word FROM dictionary
WHERE word_id = (
SELECT width_bucket(random(), 0, 1, (SELECT max(word_id) FROM dictionary))
);
$$ LANGUAGE sql;
SELECT get_random_word() || ' ' || get_random_word();
proti tabulce jako je tato:
CREATE TABLE dictionary(word_id serial primary key, word text UNIQUE NOT NULL);
Výsledkem budou konzistentní výsledky pouze v případě, že v číslování slov nebudou žádné mezery a pokud word_id
je jedinečný nebo PRIMARY KEY
. může vytvořit stejné slovo dvakrát. Pokud se tomu chcete vyhnout, budete potřebovat rekurzivní CTE nebo nějaký PL/PgSQL.
NÁHODNÉ BÝVÁNÍ
Pokud skutečně chcete skutečně náhodné řetězce, je to již dobře popsáno zde na Stack Overflow. Viz Jak vytvoříte náhodný řetězec, který je vhodný pro ID relace v PostgreSQL? mezi ostatními; podívejte se na toto vyhledávání .
Pro zajištění jedinečnosti stačí přidat UNIQUE
omezení. Nechte svou aplikaci otestovat a zjistěte, zda při INSERT
došlo k upozornění na unique_violation Pokud došlo k porušení, řádek upravte a vložte jej s novým náhodným ID. Pokud chcete, můžete to automatizovat pomocí pomocné procedury PL/PgSQL, i když to bude stále podléhat závodům mezi souběžnými vkládáními v různých transakcích.