Anda dapat menambahkan kolom, mis. word_length
yang berisi panjang kata, dan tambahkan indeks pada word_length
kolom. Biasanya akan menjadi desain yang buruk untuk memasukkan data yang dapat diturunkan dari kolom lain, tetapi dalam hal ini Anda perlu merusak kemurnian demi kinerja. Kemudian kueri Anda dapat menggunakan JOIN
kondisi menggunakan kolom ini:
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
Anda dapat menggunakan INSERT
dan UPDATE
pemicu untuk mengisi word_length
kolom secara otomatis.
Mungkin juga berguna untuk melakukan penggabungan setelah memfilter ke 5 baris:
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