2010-02-12 2 views
0

Je travaille sur un moteur de recherche dans un site Web où un visiteur peut fournir des mots-clés, puis le moteur de recherche effectue des requêtes sur une base de données.Requête de recherche MySQL, trier le résultat par les meilleurs résultats

Je sais comment interroger une table, mais comment pouvez-vous construire une seule requête qui fournit une liste de résultats complète et par ligne correspondante dans le datable le nombre d'occurrences.

dire, j'ai la table simple comme:

id | title | desc 
----------------- 
1 | title 1 | some text with some text provding the user most likely no interesting info. 

2 | title 2 | some other text 

3 | title 3 | some third text saying some other crap. 

Ce que je suis en train de réaliser est la suivante: lorsqu'un utilisateur recherche pour 'texte' i obtenir un résultat comme:

id | title | desc | noOfMatches 
------------------------------- 
1 | title 1 | ... | 4 

2 | title 3 | ... | 3 

3 | title 2 | ... | 2 

Quelqu'un peut-il m'aider avec celui-ci? Je ne suis pas sûr comment créer une requête qui peut compter le non. de occorences d'un mot fourni dans une requête ...

Répondre

1

utilisation FULLTEXT recherche:

CREATE TABLE t_ft (id INT NOT NULL PRIMARY KEY, words VARCHAR(255) NOT NULL) ENGINE=MyISAM DEFAULT CHARSET='utf8'; 

CREATE FULLTEXT INDEX fx_ft_words ON t_ft (words); 
INSERT 
INTO t_ft (id, words) 
VALUES (1, 'some text with some text provding the user most likely no interesting info'); 

INSERT 
INTO t_ft (id, words) 
VALUES (2, 'some other text'); 

INSERT 
INTO t_ft (id, words) 
VALUES (3, 'some third text saying some other crap'); 

INSERT 
INTO t_ft 
SELECT id + 3, 'complete nonsense' 
FROM t_source 
LIMIT 1000; 

SELECT *, MATCH(words) AGAINST('"some text"') AS relevance 
FROM t_ft 
WHERE MATCH(words) AGAINST('"some text"') 
ORDER BY 
     relevance DESC; 

MATCH vous retourner le rang que vous pouvez utiliser dans ORDER BY.

+0

Merci pour cela, j'ai changé quelques choses et j'ai obtenu exactement ce dont j'avais besoin de votre exemple. – Michael

Questions connexes