2009-10-09 13 views
0

J'ai besoin d'une recherche avec un algorithme de pertinence et la base de données est mysql. Je dois trier les résultats par date, si le mot-clé est dans le titre ou non, le nombre d'apparitions du mot-clé dans le texte et ainsi de suite.Mysql match contre alternative

Le match contre ne me donne pas autant de contrôle.

Répondre

2

Quelque chose comme ça ferait ce que vous voulez:

select 
    * 
from 
    myTable 
order by 
    sum 
    (
    itemdate='2009-10-09', 
    title like '%keyword%', 
    text like '%keyword%', 
    criteria4, 
    criteria5 
) 
  • Chaque critère retourne 0 si elle est fausse, et 1 si elle est vraie.
  • Vous additionnez chacun d'entre eux et passez une commande en fonction du résultat.
  • Les lignes qui répondent le mieux aux critères seront au premier plan.

Vous pouvez affiner tout cela bien sûr en n'ayant pas seulement 0 ou 1 par critère.

-3
select 
    * 
from 
    myTable 
order by 
(
    (itemdate='2009-10-09') + 
    (title like '%keyword%') + 
    (text like '%keyword%') + 
    (criteria4) + 
    (criteria5) 
) 

Cela fonctionne vraiment bien.

+0

Désolé, mais 'SELECT *' sans une clause 'WHERE' ou' HAVING' n'est pas mon idée de "fonctionne vraiment bien" – Andrew