Puede agregar una columna, p. word_length
que contiene la longitud de la palabra y agrega un índice en word_length
columna. Normalmente sería un diseño deficiente incluir datos que se pueden derivar de otra columna, pero en este caso, debe romper la pureza por el bien del rendimiento. Entonces su consulta puede usar un JOIN
condición usando esta columna:
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
Puedes usar INSERT
y UPDATE
disparadores para completar el word_length
columna automáticamente.
También podría ser útil hacer la concatenación después de filtrar hasta las 5 filas:
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