Sie können eine Spalte hinzufügen, z. word_length
die die Länge des Wortes enthält, und fügen Sie einen Index zu word_length
hinzu Säule. Normalerweise wäre es ein schlechtes Design, Daten einzubeziehen, die aus einer anderen Spalte abgeleitet werden können, aber in diesem Fall müssen Sie die Reinheit aus Leistungsgründen brechen. Dann kann Ihre Abfrage einen JOIN
verwenden Bedingung mit dieser Spalte:
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
Sie können INSERT
verwenden und UPDATE
Trigger zum Ausfüllen der word_length
Spalte automatisch.
Es kann auch hilfreich sein, die Verkettung nach dem Filtern bis auf die 5 Zeilen durchzuführen:
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