Ik kreeg vandaag een verzoekje waar ik niet direct uitkwam. Ik heb een database met personen die voor bepaalde periodes ingezet kunnen worden op projecten. Het gaat om ontwikkelingswerk maar voor de discussie is het handiger om auto's als voorbeeld te nemen, bv een autosite. Ik heb even gekozen voor vrij simpele kenmerken (waar geen verloop in zit, bv niet voor bouwjaar of km stand ofzo)
Van een auto worden de volgende gegevens vastgelegd:
De site krijgt een zoekfunctie waarin op 1 of meer kenmerken kan worden gezocht. Normaal gesproken zou dit een lijstje opleveren van auto's die aan alle kenmerken voldoen. Maar nu ligt er een verzoek of het mogelijk is om te sorteren op relevantie waarbij geldt dat hoe meer een auto past, hoe relevanter het wordt. Zoek je dus op alle 5 kenmerken dan komen de auto's die aan alle kenmerken voldoen eerst, dan die aan 4 kenmerken voldoen, dan aan 3 kenmerken etcetera.
Het idee hierachter is dat als een perfecte match niet bestaat, er toch nog resultaten komen die minder perfect zijn.
De applicatie is geschreven in PHP en draait op een MySQL database (5.0).
Mijn eerste ingeving was om voor elk kenmerk een query te doen en dan iedere keer het resultaat door te lopen om dan te kijken welke auto's matchen met hoeveel kenmerken en dat dan op te slaan. Dit is echter een oplossing die veel te traag is (het gaat momenteel om 900 records).
Wat misschien een haalbare optie is: een tabel met structuur:
car_id, key, value
bv:
1, merk, ford
1, kleur, zwart
1, brandstof, diesel
2, merk, renault
2, brandstof, LPG
2, kleur, grijs
3, merk, ford,
3, kleur, wit,
3, brandstof, LPG
....
Zoeken op 'brandstof = LPG' wordt dan iets als:
Nadeel van deze aanpak is dat ik een aparte tabel moet bijhouden met zoekvelden, nu staan die waarden nog mooi bij elkaar in 1 tabel.
Heeft iemand nog andere idee-en? Of is mijn aanpak the way to go?
Van een auto worden de volgende gegevens vastgelegd:
- Type brandstof (diesel, benzine, LPG)
- Transmissie (automaat, handgeschakeld)
- Kleur (rood,groen,blauw,wit,grijs,zwart)
- Merk (ford,mazda,opel, renault)
- Model (hatchback,station, sedan)
De site krijgt een zoekfunctie waarin op 1 of meer kenmerken kan worden gezocht. Normaal gesproken zou dit een lijstje opleveren van auto's die aan alle kenmerken voldoen. Maar nu ligt er een verzoek of het mogelijk is om te sorteren op relevantie waarbij geldt dat hoe meer een auto past, hoe relevanter het wordt. Zoek je dus op alle 5 kenmerken dan komen de auto's die aan alle kenmerken voldoen eerst, dan die aan 4 kenmerken voldoen, dan aan 3 kenmerken etcetera.
Het idee hierachter is dat als een perfecte match niet bestaat, er toch nog resultaten komen die minder perfect zijn.
De applicatie is geschreven in PHP en draait op een MySQL database (5.0).
Mijn eerste ingeving was om voor elk kenmerk een query te doen en dan iedere keer het resultaat door te lopen om dan te kijken welke auto's matchen met hoeveel kenmerken en dat dan op te slaan. Dit is echter een oplossing die veel te traag is (het gaat momenteel om 900 records).
Wat misschien een haalbare optie is: een tabel met structuur:
car_id, key, value
bv:
1, merk, ford
1, kleur, zwart
1, brandstof, diesel
2, merk, renault
2, brandstof, LPG
2, kleur, grijs
3, merk, ford,
3, kleur, wit,
3, brandstof, LPG
....
Zoeken op 'brandstof = LPG' wordt dan iets als:
code:
1
| SELECT car_id, count(*) FROM tabel WHERE key = brandstof AND value = LPG GROUP BY car_id ORDER BY count(*) |
Nadeel van deze aanpak is dat ik een aparte tabel moet bijhouden met zoekvelden, nu staan die waarden nog mooi bij elkaar in 1 tabel.
Heeft iemand nog andere idee-en? Of is mijn aanpak the way to go?