Du kan tilføje en kolonne, f.eks. word_length
der indeholder længden af ordet, og tilføj et indeks på word_length
kolonne. Normalt ville det være dårligt design at inkludere data, der kan udledes fra en anden kolonne, men i dette tilfælde skal du bryde renheden for ydeevnens skyld. Så kan din forespørgsel bruge en JOIN
tilstand ved hjælp af denne kolonne:
SELECT CONCAT(w1.my_word, w2.my_word) joined
FROM my_words w1
JOIN my_words w2 ON w1.word_length = 8 - w2.word_length
WHERE w2.word_length < 8
ORDER BY RAND()
LIMIT 5
Du kan bruge INSERT
og UPDATE
udløser for at udfylde word_length
kolonne automatisk.
Det kan også være nyttigt at lave sammenkædningen efter at have filtreret ned til de 5 rækker:
SELECT CONCAT(word1, word2) joined
FROM (
SELECT w1.my_word word1, w2.my_word word2
FROM my_words w1
JOIN my_words w2 ON w1.word_length = 8 - w2.word_length
WHERE w2.word_length < 8
ORDER BY RAND()
LIMIT 5) x