Sto costruendo una parola riordinatore (php/mysql) che accetta l'input dell'utente tra 2 e 8 lettere e restituisce parole tra 2 e 8 lettere che possono essere fatte da quelle lettere, non necessariamente utilizzando tutte le lettere, ma sicuramente non includendo più lettere di quelle fornite.Come faccio a fare in modo che la mia parola riordinatore restituisca risultati più pertinenti
L'utente immetterà qualcosa come MSIKE o MSIKEI (due i), o qualsiasi combinazione di lettere o più occorrenze di una lettera.
La query di seguito troverà tutte le occorrenze di parole che contengono M, S, I, K, o E.
Tuttavia, la query di seguito riporta anche le parole che hanno più occorrenze di lettere non richiesti. Ad esempio, la parola meek verrebbe restituita, anche se ha due ee l'utente non ha inserito due e, o la parola kiss, anche se l'utente non ha inserito s due volte.
SELECT word
FROM words
WHERE word REGEXP '[msike]'
AND has_a=0
AND has_b=0
AND has_c=0
AND has_d=0
(we skip e) or we could add has_e=1
AND has_f=0
...and so on...skipping letters m, s, i, k, and e
AND has_w=0
AND has_x=0
AND has_y=0
AND has_z=0
Annotare il colonne has_a, has_b, ecc sono o 1 se la lettera si verifica nella parola o 0 in caso contrario.
Sono aperto a tutte le modifiche allo schema della tabella.
Questo sito: http://grecni.com/texttwist.php è un buon esempio di ciò che sto tentando di emulare.
La domanda è come modificare la query per non restituire parole con più occorrenze di una lettera, a meno che l'utente non abbia inserito specificatamente una lettera più volte. Raggruppare in base alla lunghezza della parola sarebbe un ulteriore vantaggio.
Grazie mille.
EDIT: ho alterato il dB per il suggerimento di @awei, The has_ {lettera} è ora count_ {letter} e memorizza il numero di occorrenze di rispettiva lettera nella rispettiva word. Questo potrebbe essere utile quando un utente inserisce una lettera più volte. esempio: l'utente inserisce MSIKES (due s).
Inoltre, ho abbandonato l'approccio REGEXP come mostrato nell'istruzione SQL originale. Lavorando per fare la maggior parte del lavoro sul lato PHP, ma molti ostacoli sono ancora nel modo.
EDIT: Incluso prime 10 righe dalla tabella
id word alpha otcwl ospd csw sowpods dictionary enable vowels consonants start_with end_with end_with_ing end_with_ly end_with_xy count_a count_b count_c count_d count_e count_f count_g count_h count_i count_j count_k count_l count_m count_n count_o count_p count_q count_r count_s count_t count_u count_v count_w count_x count_y count_z q_no_u letter_count scrabble_points wwf_points status date_added
1 aa aa 1 0 0 1 1 1 aa a a 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 2 1 2015-11-12 05:39:45
2 aah aah 1 0 0 1 0 1 aa h a h 0 0 0 2 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 6 5 1 2015-11-12 05:39:45
3 aahed aadeh 1 0 0 1 0 1 aae hd a d 0 0 0 2 0 0 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 9 8 1 2015-11-12 05:39:45
4 aahing aaghin 1 0 0 1 0 1 aai hng a g 1 0 0 2 0 0 0 0 0 1 1 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 6 10 11 1 2015-11-12 05:39:45
5 aahs aahs 1 0 0 1 0 1 aa hs a s 0 0 0 2 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 4 7 6 1 2015-11-12 05:39:45
6 aal aal 1 0 0 1 0 1 aa l a l 0 0 0 2 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 3 4 1 2015-11-12 05:39:45
7 aalii aaiil 1 0 0 1 1 1 aaii l a i 0 0 0 2 0 0 0 0 0 0 0 2 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 5 6 1 2015-11-12 05:39:45
8 aaliis aaiils 1 0 0 1 0 1 aaii ls a s 0 0 0 2 0 0 0 0 0 0 0 2 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 6 6 7 1 2015-11-12 05:39:45
9 aals aals 1 0 0 1 0 1 aa ls a s 0 0 0 2 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 4 4 5 1 2015-11-12 05:39:45
10 aardvark aaadkrrv 1 0 0 1 1 1 aaa rdvrk a k 0 0 0 3 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 2 0 0 0 1 0 0 0 0 0 8 16 17 1 2015-11-12 05:39:45
Questo sarebbe probabilmente notevolmente più semplice se hai appena implementato in php. – pvg
@pvg Più semplice forse. Ma sicuramente non più veloce di interrogarlo dallo stesso SQL. – choz
@choz dipende probabilmente dalla complessità della query :) –