In un gioco di parole simile a Ruzzle o tipografica, dove gli utenti devono costruire parole di un dato insieme di lettere:PostgreSQL e giochi di parole
mi tengo il mio dizionario in una semplice tabella SQL:
create table good_words (
word varchar(16) primary key
);
Poiché la durata del gioco è molto breve non voglio controllare ogni parola inserita chiamando uno script PHP, che cercare quella parola nella tabella good_words
.
Invece mi piacerebbe scaricare tutte le parole possibili da una chiamata di script PHP prima che inizi il turno - dal momento che tutte le lettere sono conosciute.
La mia domanda è: se c'è un bel modo SQLish per trovare tali parole?
I.e. Potrei eseguire uno script più lungo una volta per aggiungere una colonna alla tabella good_words
, che avrebbe le stesse lettere del columnt word
, ma in ordine alfabetico ... Ma non riesco ancora a pensare a un modo di eguagliarlo dato un set di lettere.
E fare la corrispondenza di parole all'interno di uno script PHP (rispetto all'interno del database) richiederebbe probabilmente troppo tempo (a causa della larghezza di banda: dovrebbe recuperare ogni riga dal database allo script PHP).
Eventuali suggerimenti o approfondimenti per favore?
Utilizzo di postgresql-8.4.13 con CentOS Linux 6.3.
UPDATE:
altre idee che ho:
- creare uno script costantemente in esecuzione (cronjob o daemon) che precompilare una tabella SQL con trattamento di pensione lettere precompilate e parole possibili - ma sente ancora come uno spreco di larghezza di banda e CPU, preferirei risolvere questo all'interno del database
- Aggiungi colonne intero
a
,b
, ...,z
e ogni qualvolta memorizzo unword
ingood_words
, memorizzare le occorrenze delle lettere lì. Mi chiedo if it is possible to create an insert trigger in Pl/PgSQL per quello?
A) questa probabilmente sarà ancora una * lista molto lunga * di parole che devono essere scaricate lì, b) che offre a un utente tecnico un ottimo modo per imbrogliare. ;) – deceze
In realtà no: Ruzzle riporta il numero di parole possibili alla fine dei round e quel numero raramente supera i 300. Anche con la lunghezza di parola presunta di 10 lettere che sarebbero solo 3 kbyte - prima di gzipping. –
Puoi caricare un dump CSV del tavolo 'good_words' da qualche parte con cui giocare? O fornire un'altra fonte, per favore? – vyegorov