Trong một trò chơi chữ tương tự như Ruzzle hoặc Letterpress, nơi người sử dụng phải xây dựng từ ra khỏi một tập hợp các chữ cái:PostgreSQL và từ trò chơi
tôi giữ từ điển của tôi trong một bảng SQL đơn giản:
create table good_words (
word varchar(16) primary key
);
Vì thời lượng trò chơi rất ngắn nên tôi không muốn kiểm tra từng từ được nhập bằng cách gọi tập lệnh PHP, từ này sẽ hiển thị trong bảng good_words
.
Thay vào đó, tôi muốn tải xuống tất cả các từ có thể bằng một cuộc gọi tập lệnh PHP trước khi bắt đầu vòng - vì tất cả các chữ cái đều được biết.
Câu hỏi của tôi là: nếu có cách SQL đẹp để tìm những từ như vậy?
I.e. Tôi có thể chạy tập lệnh dài hơn một lần để thêm cột vào bảng good_words
, có cùng các chữ cái như trong cột word
, nhưng được sắp xếp theo thứ tự bảng chữ cái ... Nhưng tôi vẫn không thể nghĩ ra cách phù hợp cho nó thiết lập các chữ cái.
Và thực hiện kết hợp từ bên trong của tập lệnh PHP (so với bên trong cơ sở dữ liệu) có thể mất quá nhiều thời gian (vì băng thông: phải lấy mọi hàng từ cơ sở dữ liệu đến tập lệnh PHP).
Bất kỳ đề xuất hoặc thông tin chi tiết nào?
Sử dụng postgresql-8.4.13 với CentOS Linux 6.3.
UPDATE:
khác ý tưởng tôi có:
- Tạo một kịch bản liên tục chạy (cronjob hoặc daemon) mà sẽ điền trước một bảng SQL với chữ precompiled bảng và lời nói có thể - nhưng vẫn cảm thấy như lãng phí băng thông và CPU, tôi muốn giải quyết vấn đề này bên trong cơ sở dữ liệu
- Thêm cột số nguyên
a
,b
, ...,z
và bất cứ khi nào tôi lưu trữword
vàogood_words
, lưu trữ các chữ xuất hiện ở đó. Tôi tự hỏi if it is possible to create an insert trigger in Pl/PgSQL cho điều đó?
A) đó có thể sẽ là danh sách * rất dài * của các từ cần được tải xuống ở đó, b) cung cấp cho người dùng kỹ thuật một cách tuyệt vời để ăn gian. ;) – deceze
Trên thực tế không: Ruzzle báo cáo số từ có thể ở cuối vòng và con số đó hiếm khi vượt quá 300. Ngay cả với độ dài từ được giả định là 10 chữ cái sẽ chỉ đơn thuần là 3 kbyte - trước khi gzipping. –
Bạn có thể tải lên vùng CSV của bảng 'good_words' ở đâu đó để chơi cùng không? Hoặc cung cấp một nguồn khác, xin vui lòng? – vyegorov