sql >> Databasteknik >  >> RDS >> Mysql

Få de flesta liknande rader i MySQL-tabellen och ordna dem efter likhet

Eftersom jag i min tabell för närvarande bara har cirka 5 000 rader och de växer sakta, bestämde jag mig för att faktiskt använda följande enkla tillvägagångssätt (det kom till mig precis efter att jag skrev frågan).

Fröet kan säga är Honda Accord (model_id 456), 2004, bensin, 2.0L, 155 hk, sedan med 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

Det kommer att fungera, så länge jag inte har för många rader. Om tabellen blir 50-100k kommer jag förmodligen att behöva byta till något som Lucene ?




  1. Sortering efter någon kolumn och även efter rand() i MySQL

  2. MySQL använder inte index när man frågar över BIT-fält med hjälp av bitvisa funktioner

  3. Importera MS ACCESS DB till mySql?

  4. Hur ändrar jag datumformatet i Postgres?