Sorteren op beste match

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Femke van Gemert

Femke van Gemert

12/11/2012 11:06:13
Quote Anchor link
Ik krijg een lijst met resultaten terug van mijn query die ik graag wil gaan sorteren op de beste match. Ik zal proberen het zo kort mogelijk uit te leggen, als het onduidelijk is dan hoor ik het wel.

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.
 
PHP hulp

PHP hulp

22/12/2024 15:19:24
 
Kris Peeters

Kris Peeters

12/11/2012 12:14:14
Quote Anchor link
Ja, daar bestaat iets voor.
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)
PHP script in nieuw venster Selecteer het PHP script
1
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


(Misschien komt iemand nog met een geoptimaliseerd alternatief)
Gewijzigd op 12/11/2012 12:15:29 door Kris Peeters
 
Femke van Gemert

Femke van Gemert

14/11/2012 14:36:03
Quote Anchor link
Dat is inderdaad een goede oplossing!

Ik zal het eens op deze manier gaan proberen, bedankt in ieder geval.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.