sql >> Base de Datos >  >> RDS >> Mysql

Selección de palabras aleatorias de la tabla

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