Het klinkt alsof je een paar willekeurig geselecteerde woorden wilt hebben uit een woordenboek . Het is een beetje moeilijk te zeggen gezien het gebrek aan duidelijkheid van de vraag.
WILLEKEURIGE WOORDEN WOORDEN
De beste manier om willekeurige woordenboekwoorden te kiezen, is waarschijnlijk aan het einde van PHP door een wachtwoordzingenerator te gebruiken die dit voor u doet.
Je kunt het doen in PostgreSQL met behulp van een tabel dictionary
met één word
per rij echter:
SELECT word FROM dictionary ORDER BY random() LIMIT 2;
De prestaties zullen echt verschrikkelijk zijn met een groot woordenboek. Het kan veel sneller als het woordenboek niet verandert en er een unieke word_id
is zonder gaten in de nummering, zodat u kunt schrijven:
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();
tegen een tafel als deze:
CREATE TABLE dictionary(word_id serial primary key, word text UNIQUE NOT NULL);
Dit levert alleen consistente resultaten op als er geen gaten in de woordnummering zijn en als word_id
is uniek of de PRIMARY KEY
. Het kan twee keer hetzelfde woord produceren. Als je dat wilt vermijden, heb je een recursieve CTE of wat PL/PgSQL nodig.
WILLEKEURIG GIBBERISH
Als je echt willekeurige strings wilt, is dat hier al goed behandeld op Stack Overflow. Zie Hoe maak je een willekeurige string die geschikt is voor een sessie-ID in PostgreSQL? onder andere; bekijk deze zoekopdracht .
Voeg gewoon een UNIQUE
. toe om uniek te zijn beperking. Laat uw applicatie testen om te zien of er een unique_violation is opgetreden toen u INSERT
wijzig de rij en voeg deze in met een nieuwe willekeurige ID als er een overtreding is opgetreden. Als je wilt, kun je dit automatiseren met een PL/PgSQL-helperprocedure, hoewel het nog steeds onderhevig zal zijn aan races tussen gelijktijdige inserts in verschillende transacties.