Như trong bảng của tôi hiện tại, tôi chỉ có khoảng 5 nghìn hàng và chúng đang phát triển chậm, tôi quyết định thực sự sử dụng cách tiếp cận đơn giản sau (nó đến với tôi ngay sau khi tôi viết câu hỏi).
Hạt giống có thể nói là Honda Accord (model_id 456), 2004, xăng, 2.0L, 155hp, sedan với ID tự động 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
Nó sẽ hoạt động, miễn là tôi không có quá nhiều hàng. Nếu bảng trở thành 50-100k, tôi có thể sẽ phải chuyển sang một cái gì đó như Lucene
?