सुनिश्चित नहीं है कि यह एक बेहतर तरीका है, लेकिन मैं इसे इस तरह से करूंगा:
SELECT d.id, d.word, LEFT(d.description, 100) description,
COALESCE(sum(v.vote), 0) votecount,
(CONCAT(word, description, `usage`) LIKE '%George%')
+ (CONCAT(word, description, `usage`) LIKE '%Tabuki%')
+ (CONCAT(word, description, `usage`) LIKE '%Street%')
+ (CONCAT(word, description, `usage`) LIKE '%Fighter%')
+ (CONCAT(word, description, `usage`) LIKE '%Miley%')
+ (CONCAT(word, description, `usage`) LIKE '%Cyrus%') `match`
FROM definition d
LEFT JOIN vote v ON v.definition_id = d.id
GROUP BY d.id
HAVING `match` > 0
ORDER BY `match` DESC, votecount DESC
यदि तार काफी लंबे हैं, तो शायद दोहराए गए संयोजन में व्युत्पन्न तालिका बनाने की तुलना में अधिक समय लग सकता है (संभावना नहीं है, लेकिन यह इसे आज़माने लायक है):
SELECT id, word, description, votecount,
(fullDesc LIKE '%George%')
+ (fullDesc LIKE '%Tabuki%')
+ (fullDesc LIKE '%Street%')
+ (fullDesc LIKE '%Fighter%')
+ (fullDesc LIKE '%Miley%')
+ (fullDesc LIKE '%Cyrus%') `match`
FROM (
SELECT d.id, d.word, LEFT(d.description, 100) description,
COALESCE(sum(vote), 0) votecount, CONCAT(word, description, `usage`) fullDesc
FROM definition d
LEFT JOIN vote v ON v.definition_id = d.id
GROUP BY d.id
) s
HAVING `match` > 0
ORDER BY `match` DESC, votecount DESC