Du kan lägga till en kolumn, t.ex. word_length
som innehåller längden på ordet, och lägg till ett index på word_length
kolumn. Normalt skulle det vara dålig design att inkludera data som kan härledas från en annan kolumn, men i det här fallet måste du bryta renheten för prestanda skull. Då kan din fråga använda en JOIN
villkor med denna kolumn:
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 använda INSERT
och UPDATE
utlösare för att fylla i word_length
kolumnen automatiskt.
Det kan också vara bra att göra sammanfogningen efter att ha filtrerat ner till de 5 raderna:
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