2012-11-24 12 views
0

J'ai un robot qui analyse tous les mots d'une page Web. il insère ensuite chaque mot dans une base de données mysql avec l'URL à laquelle il appartient. La recherche est ensuite classée par la quantité de mots trouvés dans le document. Le problème est ... comment puis-je ajouter une requête à plusieurs termes dans ma requête existante. Il est parfait pour l'interrogation à un seul terme, mais je souhaite que ma requête tente de trouver des mots dans la même page Web, et si aucun mot n'apparaît dans la page Web, renvoyer les résultats pour les termes comme d'habitude.Requête de recherche à plusieurs termes

Ma requête est la suivante:

  $results = addslashes($_POST['results']); 

       " SELECT p.page_url AS url, 
         COUNT(*) AS occurrences 
         FROM page p, word w, occurrence o 
         WHERE p.page_id = o.page_id AND 
         w.word_id = o.word_id AND 
         w.word_word = \"$keyword\" 
         GROUP BY p.page_id 
         ORDER BY occurrences DESC 
         LIMIT $results" 

Répondre

0

Utilisez COUNT(DISTINCT ...) pour compter le nombre de mots différents trouvés sur chaque page, et utiliser IN pour trouver une liste de mots:

SELECT 
    p.page_url AS url, 
    COUNT(DISTINCT w.word_word) AS words_found 
    COUNT(*) AS occurrences 
FROM page p 
JOIN occurrence o ON p.page_id = o.page_id 
JOIN word w ON w.word_id = o.word_id 
WHERE w.word_word IN ('foo', 'bar') 
GROUP BY p.page_id 
ORDER BY occurrences DESC 

Si vous voulez vous assurer qu'au moins n des termes de recherche figurent sur la page, puis ajoutez une clause HAVING:

GROUP BY p.page_id 
HAVING COUNT(DISTINCT w.word_word) >= 2 
ORDER BY occurrences DESC 
+0

ce que je suis censé mettre où « foo » et « bar » sont? – user1840291

+0

@ user1840291: Cela dépend des mots que vous recherchez. Pouvez-vous donner un exemple précis de ce que vos utilisateurs pourraient rechercher? –

+0

Son un moteur de recherche, Mark, donc je n'ai aucune idée .. – user1840291

0

Vous pouvez effectuer des sous-sélections si le moteur de base de données le prend en charge. Exemple:

SELECT 
    url, 
    (select count(*) from table where conditions1) as count1, 
    (select count(*) from table where conditions2) as count2 
FROM table 
Questions connexes