[mysql][php] zoeken met prioriteiten en gewichten

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Voor een website over auto's proberen we een uitgebreide zoekfunctie te maken. We willen geen standaar strikte zoekopdracht maar een iets variabelere.

We willen werken met een prioriteit per zoekcriteria en koppelen daar een gewicht aan. Prioriteiten (gewicht):
- zeer belangrijk (20)
- belangrijk (15)
- normaal (10)
- niet belangrijk (5)

We nemen dan de som van de gegeven gewichten en alle gevonden waardes die aan bv 70% van het totaal gewicht voldoen worden weergegeven.

De zoekcriteria: merk, kleur, bouwjaar, brandstoftype

Wanneer de prioriteit "niet belangrijk" is wordt deze ruimer genomen, bv 1998 geeft ook wagens van 3 jaar jonger of ouder.


Het lukt ons echter niet om dit principe goed in code om te zetten.

Ons eerste idee was eerst alle waardes gewoon op te zoeken, in een tabel te zetten en dan die tabel te gaan filteren maar dit lijkt ons zeker als er wat meer bezoekers zouden komen een langzame en omslachtige manier. Is er een tweakers die ons een duw in de juiste richting zou kunnen geven?

Acties:
  • 0 Henk 'm!

  • Yo-han
  • Registratie: December 2001
  • Laatst online: 18-08 20:16

Yo-han

nope.

Zou moeten lukken met een MySQL Fulltext search. Je kan daarmee niet de waardes 20,15,10 en 5 koppelen maar wel een gewicht meegeven.

SQL:
1
2
3
4
5
SELECT titel,content 
FROM content 
WHERE 
MATCH (titel,content)
AGAINST ('Auto +(>BMW <Mercedes) IN BOOLEAN MODE);


Meer informatie is te vinden in de MySQL documentatie.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Als het "uitwerken in code" niet wil dan wordt dat zeer waarschijnlijk veroorzaakt doordat jullie de specificaties nog niet sluitend hebben. Het lijkt me dat je beter nog wat langer in de FO fase kunt blijven. Je hebt bijvoorbeeld wel omschreven dat het niet belangrijk zijn van bouwjaar een marge van 3 jaar geeft, maar hoe wil je dit bij model en kleur doen?

Probeer eerst duidelijk op papier te krijgen wat het gewicht nu per variabele exact betekend en schrijf dit helemaal uit. Als dat helemaal duidelijk is kun je beginnen om te kijken hoe je dit technisch op gaat lossen.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Yo-han schreef op donderdag 11 januari 2007 @ 09:30:
Zou moeten lukken met een MySQL Fulltext search. Je kan daarmee niet de waardes 20,15,10 en 5 koppelen maar wel een gewicht meegeven.

SQL:
1
2
3
4
5
SELECT titel,content 
FROM content 
WHERE 
MATCH (titel,content)
AGAINST ('Auto +(>BMW <Mercedes) IN BOOLEAN MODE);


Meer informatie is te vinden in de MySQL documentatie.
Bedankt voor de info. We gaan deze functies eens bekijken en wat proberen mee te testen
Janoz schreef op donderdag 11 januari 2007 @ 10:10:
... Je hebt bijvoorbeeld wel omschreven dat het niet belangrijk zijn van bouwjaar een marge van 3 jaar geeft, maar hoe wil je dit bij model en kleur doen?

Probeer eerst duidelijk op papier te krijgen wat het gewicht nu per variabele exact betekend en schrijf dit helemaal uit. Als dat helemaal duidelijk is kun je beginnen om te kijken hoe je dit technisch op gaat lossen.
Heb je volledig gelijk in en zaten we op papier ook een beetje op vast.

We hebben besloten bij de "niet belangrijke" items alle gevonden waardes toe te laten maar gevonden waardes die gelijk zijn aan het zoekcriteria eerst te plaatsen.