Seperti di meja saya saat ini saya hanya memiliki sekitar 5k baris dan mereka tumbuh perlahan, saya memutuskan untuk benar-benar menggunakan pendekatan sederhana berikut (itu datang kepada saya tepat setelah saya menulis pertanyaan).
Benihnya katakanlah Honda Accord (model_id 456), 2004, bensin, 2.0L, 155hp, sedan dengan auto-inc ID 123.
SELECT vehicles.*,
(IF(`fuel_type`='gasoline', 3, 0) +
IF(`body_style`='sedan', 1, 0) +
IF(`year` > 2001 AND `year` < 2007, 2, 0) +
IF(`engine_size` >= 1.8 AND `engine_size` <= 2.2, 1, 0) +
IF(`engine_power`=155, 3, IF(`engine_power`>124 AND `engine_power`<186, 1, 0))) AS `rank`
FROM vehicles
WHERE vehicle_id!=123 AND model_id=456
ORDER BY `rank` DESC
LIMIT 3
Ini akan berhasil, selama saya tidak terlalu banyak baris. Jika tabel menjadi 50-100k, saya mungkin harus beralih ke sesuatu seperti Lucene
?