Có vẻ như bạn có thể muốn một cặp từ được chọn ngẫu nhiên từ từ điển . Thật khó để nói với sự thiếu rõ ràng của câu hỏi.
CÁC TỪ NGỮ NGẪU NHIÊN
Cách tốt nhất để chọn các từ trong từ điển ngẫu nhiên có lẽ là ở phần cuối PHP bằng cách sử dụng trình tạo cụm từ mật khẩu thực hiện điều đó cho bạn.
Bạn có thể làm điều đó trong PostgreSQL bằng cách sử dụng bảng dictionary
với một word
mỗi hàng, tuy nhiên:
SELECT word FROM dictionary ORDER BY random() LIMIT 2;
Hiệu suất sẽ thực sự khủng khiếp với một từ điển lớn. Việc này có thể được thực hiện nhanh hơn nhiều nếu từ điển không thay đổi và có một word_id
duy nhất không có khoảng trống trong đánh số, cho phép bạn viế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();
chống lại một bảng như thế này:
CREATE TABLE dictionary(word_id serial primary key, word text UNIQUE NOT NULL);
Điều này sẽ chỉ tạo ra kết quả nhất quán nếu không có khoảng trống trong việc đánh số từ và nếu word_id
là duy nhất hoặc PRIMARY KEY
. Nó có thể sản xuất cùng một từ hai lần. Nếu bạn muốn tránh điều đó, bạn sẽ cần một CTE đệ quy hoặc một số PL / PgSQL.
GIBBERISH NGẪU NHIÊN
Nếu bạn thực sự muốn các chuỗi thực sự ngẫu nhiên, điều đó đã được đề cập ở đây trên Stack Overflow. Xem Cách tạo ngẫu nhiên chuỗi phù hợp với ID phiên trong PostgreSQL? trong số những người khác; xem tìm kiếm này .
Để đảm bảo tính duy nhất, chỉ cần thêm UNIQUE
hạn chế. Kiểm tra ứng dụng của bạn để xem liệu unique_violation có được nâng lên khi bạn INSERT
không chỉnh sửa hàng và chèn nó với một ID ngẫu nhiên mới nếu vi phạm xảy ra. Nếu muốn, bạn có thể tự động hóa việc này bằng thủ tục trợ giúp PL / PgSQL, mặc dù nó sẽ vẫn phải chạy đua giữa các lần chèn đồng thời trong các giao dịch khác nhau.