fix(console): deduplicate models and engines in vehicle navigation
Models and engines tables have many duplicate names (e.g. 24 ASTRA rows, 210 F-150 rows, 398 "5.7L 350CID V8" rows). Changed get_models() and get_engines() to use GROUP BY UPPER(name) instead of DISTINCT on id+name so each model/engine appears only once in the navigation lists. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -67,16 +67,17 @@ class Database:
|
|||||||
if brand:
|
if brand:
|
||||||
return self._query(
|
return self._query(
|
||||||
"""
|
"""
|
||||||
SELECT DISTINCT m.id, m.name
|
SELECT MIN(m.id) AS id, m.name
|
||||||
FROM models m
|
FROM models m
|
||||||
JOIN brands b ON m.brand_id = b.id
|
JOIN brands b ON m.brand_id = b.id
|
||||||
WHERE UPPER(b.name) = UPPER(?)
|
WHERE UPPER(b.name) = UPPER(?)
|
||||||
|
GROUP BY UPPER(m.name)
|
||||||
ORDER BY m.name
|
ORDER BY m.name
|
||||||
""",
|
""",
|
||||||
(brand,),
|
(brand,),
|
||||||
)
|
)
|
||||||
return self._query(
|
return self._query(
|
||||||
"SELECT id, name FROM models ORDER BY name"
|
"SELECT MIN(id) AS id, name FROM models GROUP BY UPPER(name) ORDER BY name"
|
||||||
)
|
)
|
||||||
|
|
||||||
def get_years(
|
def get_years(
|
||||||
@@ -109,8 +110,13 @@ class Database:
|
|||||||
) -> list[dict]:
|
) -> list[dict]:
|
||||||
"""Return engines, optionally filtered by brand/model/year."""
|
"""Return engines, optionally filtered by brand/model/year."""
|
||||||
sql = """
|
sql = """
|
||||||
SELECT DISTINCT e.id, e.name, e.displacement_cc, e.cylinders,
|
SELECT MIN(e.id) AS id, e.name,
|
||||||
e.fuel_type, e.power_hp, e.torque_nm, e.engine_code
|
MAX(e.displacement_cc) AS displacement_cc,
|
||||||
|
MAX(e.cylinders) AS cylinders,
|
||||||
|
MAX(e.fuel_type) AS fuel_type,
|
||||||
|
MAX(e.power_hp) AS power_hp,
|
||||||
|
MAX(e.torque_nm) AS torque_nm,
|
||||||
|
MAX(e.engine_code) AS engine_code
|
||||||
FROM engines e
|
FROM engines e
|
||||||
JOIN model_year_engine mye ON e.id = mye.engine_id
|
JOIN model_year_engine mye ON e.id = mye.engine_id
|
||||||
JOIN models m ON mye.model_id = m.id
|
JOIN models m ON mye.model_id = m.id
|
||||||
@@ -128,7 +134,7 @@ class Database:
|
|||||||
if year:
|
if year:
|
||||||
sql += " AND y.year = ?"
|
sql += " AND y.year = ?"
|
||||||
params.append(int(year))
|
params.append(int(year))
|
||||||
sql += " ORDER BY e.name"
|
sql += " GROUP BY UPPER(e.name) ORDER BY e.name"
|
||||||
return self._query(sql, tuple(params))
|
return self._query(sql, tuple(params))
|
||||||
|
|
||||||
def get_model_year_engine(
|
def get_model_year_engine(
|
||||||
|
|||||||
Reference in New Issue
Block a user