Voor een webapplicatie loop ik tegen het volgende probleem aan:
Ik heb een tabel met produktgegevens (merk, type, lengte, prijs, etc). Het is de bedoeling dat door het aangeven van een aantal criteria de produkten geselecteerd worden.
In eerste instantie werd de query ongeveer als de volgende pseudocode:
dus het is een opeenvolging van voorwaarden waaraan voldaan moet worden.
Stel dat iemand veel criteria opgeeft, dan zou het kunnen dat er geen produkten aan zijn wensen voldoen. Om de klant toch wat te laten zien wil ik een lijst weergeven met produkten die niet helemaal voldoen aan de criteria. Je kunt denken aan een prijs die iets hoger is, of afmetingen die net iets anders zijn. Dit wil ik dan graag sorteren op relevantie, dus in hoeverre het produkt voldoet aan de opgegeven criteria.
Een oplossing die ik heb bedacht is om per criterium de records te selecteren die hieraan voldoen. Deze krijgen een bepaald aantal punten. De records die bijna voldoen aan het criterium krijgen minder punten (eventueel afhankelijk van de afwijking). Na het uitvoeren van een aantal queries heb ik dan een grote array met punten. Deze kan ik dan optellen, sorteren en weergeven.
Nu heb ik het idee dat dit een vrij inefficiënt proces is, en dat het misschien efficiënter kan. Kunnen jullie mij een duw in de goede (of een goede) richting geven, of zit ik nu op het juiste pad?
In een later stadium zal de produktentabel bestaan uit 10.000 tot 20.000 artikelen.
Ik heb een tabel met produktgegevens (merk, type, lengte, prijs, etc). Het is de bedoeling dat door het aangeven van een aantal criteria de produkten geselecteerd worden.
In eerste instantie werd de query ongeveer als de volgende pseudocode:
code:
1
2
3
4
5
6
7
| SELECT * FROM tabel WHERE ... AND lengte < max_lengte AND lengte > min_lengte AND ... |
dus het is een opeenvolging van voorwaarden waaraan voldaan moet worden.
Stel dat iemand veel criteria opgeeft, dan zou het kunnen dat er geen produkten aan zijn wensen voldoen. Om de klant toch wat te laten zien wil ik een lijst weergeven met produkten die niet helemaal voldoen aan de criteria. Je kunt denken aan een prijs die iets hoger is, of afmetingen die net iets anders zijn. Dit wil ik dan graag sorteren op relevantie, dus in hoeverre het produkt voldoet aan de opgegeven criteria.
Een oplossing die ik heb bedacht is om per criterium de records te selecteren die hieraan voldoen. Deze krijgen een bepaald aantal punten. De records die bijna voldoen aan het criterium krijgen minder punten (eventueel afhankelijk van de afwijking). Na het uitvoeren van een aantal queries heb ik dan een grote array met punten. Deze kan ik dan optellen, sorteren en weergeven.
Nu heb ik het idee dat dit een vrij inefficiënt proces is, en dat het misschien efficiënter kan. Kunnen jullie mij een duw in de goede (of een goede) richting geven, of zit ik nu op het juiste pad?
In een later stadium zal de produktentabel bestaan uit 10.000 tot 20.000 artikelen.
[ Voor 1% gewijzigd door Verwijderd op 19-09-2003 20:40 . Reden: Layout werd verknald door lange query... ]