ランダムに選択された単語のペアが必要なようです。 辞書から 。質問が明確でないことを考えると、わかりにくいです。
ランダムな辞書の単語
ランダムな辞書の単語を選択する最良の方法は、おそらくPHPの最後で、パスフレーズジェネレーターを使用して選択することです。
テーブルdictionary
を使用してPostgreSQLでそれを行うことができます 1つのword
ただし、行ごと:
SELECT word FROM dictionary ORDER BY random() LIMIT 2;
大きな辞書を使用すると、パフォーマンスは本当にひどいものになります。辞書が変更されず、一意のword_id
があれば、はるかに高速に実行できます。 番号付けにギャップがなく、次のように書くことができます:
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();
このようなテーブルに対して:
CREATE TABLE dictionary(word_id serial primary key, word text UNIQUE NOT NULL);
これは、単語番号にギャップがなく、word_id
の場合にのみ、一貫した結果を生成します。 一意であるか、PRIMARY KEY
。 できます 同じ単語を2回生成します。これを回避したい場合は、再帰CTEまたはPL/PgSQLが必要になります。
ランダムなジブリッシュ
実際に本当にランダムな文字列が必要な場合は、StackOverflowですでに十分に説明されています。 ランダムを作成する方法を参照してくださいPostgreSQLのセッションIDに適した文字列? とりわけ; この検索 をご覧ください 。
一意性を確保するには、UNIQUE
を追加するだけです。 制約。 INSERT
を実行したときにunique_violationが発生したかどうかを確認するために、アプリケーションをテストしてもらいます 行を編集し、違反が発生した場合は新しいランダムIDを挿入します。必要に応じて、PL / PgSQLヘルパープロシージャを使用してこれを自動化できますが、異なるトランザクションでの同時挿入間の競合が発生する可能性があります。