Sorteren op beste match
Je voert in op welke settings je wilt zoeken, deze heten 'findsettings'. Met deze findsettings zoek ik op producten. Dit gaat allemaal goed, tot dat hij moet gaan sorteren op de beste match. Er zijn namelijk bepaalde findsettings velden zoals min_review, max_price, allows_pets, etc. die hij moet gaan sorteren. Bijvoorbeeld eerst op minimale review van 40%, daarna op max_price is 10.00, en dan op allows_pets = 0. Het punt is dat hij de producten die er niet helemaal aan voldoen ook moet tonen, alleen dan onderaan de lijst. Dus in principe eerst de beste match, dan de 2e match, 3e match etc. tot de minst passende match.
Ik weet niet of ik dit gewoon kan doen met OR en ORDER, ik heb ook gekeken naar de functie MATCH AGAINST, maar die kreeg ik niet helemaal werkend.
Ik hoop dat jullie mij kunnen helpen, want ik zou zo niet weten hoe ik dit het beste aan kan pakken.
Lees even mijn reactie hier: http://www.phphulp.nl/php/forum/topic/matchcombo/87403/#626698
Ik zal ongeveer het zelfde vertellen.
Dus ... ipv. de clausules in de WHERE te zetten, gaan we voor elke clausule een waarde toekennen; hier kan je een 'gewicht'-factor meegeven op basis van hoe belangrijk je het item vindt (als voorbeeld: de maximum prijs achten we 5 maal belangrijker dan de andere clausules). Op het einde tellen we die waarden op en we sorteren op die waarde.
Resultaat: alle records worden geselecteerd en je kan heel soepel fine tunen
Dat wordt dus iets als
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
SELECT
id, productnaam,
(min_review > 5) AS match_min_review ,
(max_price < 10.00) AS match_max_price ,
(allows_pets = 0) AS match_allows_pets
FROM producten
ORDER BY
(
match_min_review * 1
+ match_max_price * 5
+ match_allows_pets * 1
) DESC
id, productnaam,
(min_review > 5) AS match_min_review ,
(max_price < 10.00) AS match_max_price ,
(allows_pets = 0) AS match_allows_pets
FROM producten
ORDER BY
(
match_min_review * 1
+ match_max_price * 5
+ match_allows_pets * 1
) DESC
(Misschien komt iemand nog met een geoptimaliseerd alternatief)
Gewijzigd op 12/11/2012 12:15:29 door Kris Peeters
Ik zal het eens op deze manier gaan proberen, bedankt in ieder geval.