Sepertinya Anda ingin sepasang kata yang dipilih secara acak dari kamus . Agak sulit untuk mengatakannya karena kurangnya kejelasan pertanyaan.
KATA KAMUS RANDOM
Cara terbaik untuk memilih kata kamus acak mungkin di akhir PHP dengan menggunakan generator frasa sandi yang melakukannya untuk Anda.
Anda dapat melakukannya di PostgreSQL menggunakan tabel dictionary
dengan satu word
per baris, meskipun:
SELECT word FROM dictionary ORDER BY random() LIMIT 2;
Kinerja akan benar-benar mengerikan dengan kamus besar. Ini dapat dilakukan lebih cepat jika kamus tidak berubah dan ada word_id
yang unik tanpa celah dalam penomoran, memungkinkan Anda untuk menulis:
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();
terhadap tabel seperti ini:
CREATE TABLE dictionary(word_id serial primary key, word text UNIQUE NOT NULL);
Ini hanya akan menghasilkan hasil yang konsisten jika tidak ada celah dalam penomoran kata dan jika word_id
unik atau PRIMARY KEY
. Itu bisa menghasilkan kata yang sama dua kali. Jika Anda ingin menghindarinya, Anda memerlukan CTE rekursif atau PL/PgSQL.
Omong kosong Acak
Jika Anda benar-benar menginginkan string yang benar-benar acak, itu sudah dibahas dengan baik di sini di Stack Overflow. Lihat Bagaimana Anda membuat acak string yang cocok untuk ID sesi di PostgreSQL? diantara yang lain; lihat penelusuran ini .
Untuk memastikan keunikan, cukup tambahkan UNIQUE
paksaan. Uji aplikasi Anda untuk melihat apakah unique_violation muncul saat Anda INSERT
ed baris, dan masukkan dengan ID acak baru jika terjadi pelanggaran. Jika Anda mau, Anda dapat mengotomatisasi ini dengan prosedur pembantu PL/PgSQL, meskipun itu masih akan tunduk pada balapan antara penyisipan bersamaan dalam transaksi yang berbeda.