sql >> Database >  >> RDS >> Mysql

De meeste vergelijkbare rijen in de MySQL-tabel krijgen en ze op overeenkomst rangschikken

Omdat ik momenteel in mijn tabel slechts ongeveer 5k rijen heb en ze langzaam groeien, besloot ik om de volgende eenvoudige benadering te gebruiken (het kwam bij me op net nadat ik de vraag had geschreven).

Laten we zeggen Honda Accord (model_id 456), 2004, benzine, 2.0L, 155 pk, sedan met 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

Het zal werken, zolang ik niet te veel rijen heb. Als de tafel 50-100k wordt, zal ik waarschijnlijk moeten overschakelen naar iets als Lucene ?




  1. Een blik op de Oracle Group-by Bug

  2. Hekaton met een twist:In-memory TVP's – Deel 3

  3. MAX() vs GREATEST() in MySQL:wat is het verschil?

  4. Meten van "Observer Overhead" van SQL Trace versus uitgebreide gebeurtenissen