2012-01-22 4 views
0

J'ai une question de mysql fulltext. Refrence sur: http://dev.mysql.com/doc/refman/5.0/en/fulltext-boolean.htmlmysql fulltext union mots

SELECT * FROM table WHERE (MATCH (aindex,bindex) AGAINST ('(+apple +juice)' IN BOOLEAN MODE)) 

Ce retour 14 articles

SELECT * FROM table WHERE (MATCH (aindex,bindex) AGAINST ('(+apple +pie)' IN BOOLEAN MODE)) 

Ce retour 36 articles

SELECT * FROM table WHERE (MATCH (aindex,bindex) AGAINST ('(+apple +pie)|(+apple +juice)' IN BOOLEAN MODE)) 

Ce retour 1910 articles, évidemment, ma question a un problème. Comment rechercher des mots contient exactement (+apple +pie) et (+apple +juice)? Je pense qu'il devrait être de retour 14+36=50items

Et dans mon but, je besoin d'une recherche syndicale pour

(+apple +pie) (+apple +juice) (+apple +macintosh) (+apple +turnover) (+apple +strudel) (+pear +pie) (+pear +juice) (+pear +macintosh) (+pear +turnover) (+pear +strudel)

il devrait être de retour de près de 520 articles. Merci.

+0

utiliser l'opérateur syndical:. query1 union query2 - http://www.w3schools.com/sql /sql_union.asp – Adrian

+0

@Adrian, ce serait une longue requête longue ntence. J'ai enfin 10 mots-clés de recherche. –

Répondre

2

Cela devrait être ce que vous voulez:

SELECT 
    * 
FROM 
    table 
WHERE 
    (MATCH (aindex,bindex) AGAINST ('+apple +(pie juice)' IN BOOLEAN MODE)) 

ETA: avez manqué les clauses de poires mon premier la lecture. Pour obtenir tous ceux que vous avez énumérés je pense cela devrait fonctionner:

SELECT 
    * 
FROM 
    table 
WHERE 
    (MATCH (aindex,bindex) AGAINST ('+((apple +(pie juice macintosh turnover strudel)) (pear +(pie juice macintosh turnover strudel)))' IN BOOLEAN MODE)); 

Cela devrait se traduire par « doit contenir la pomme et l'un de tarte, jus, macintosh, chiffre d'affaires, ou strudel ou poire et un de tarte, jus, macintosh, chiffre d'affaires, ou strudel

Si cela ne fonctionne pas, je ferais ceci:

SELECT 
    * 
FROM 
    table 
WHERE 
    (MATCH (aindex,bindex) AGAINST ('+apple +(pie juice macintosh turnover strudel)' IN BOOLEAN MODE)) 
UNION 
SELECT 
    * 
FROM 
    table 
WHERE 
    (MATCH (aindex,bindex) AGAINST ('+pear +(pie juice macintosh turnover strudel)' IN BOOLEAN MODE)); 
+0

alors comment faire face à la dernière ma recherche de but? '(SELECT * FROM table WHERE (MATCH (aindex, bindex) CONTRE ('+ pomme (+ tarte + jus + macintosh + roulement + strudel)' EN MODE BOOLEAN))) UNION (SELECT * FROM table WHERE (MATCH (aindex, bindex) CONTRE ('+ poire (+ tarte + jus + macintosh + chiffre d'affaires + strudel)' EN MODE BOOLEAN))) '? –

+0

Ajouté deux solutions possibles pour cela. Espérons que les premiers travaux. – Ilion

+0

super, merci, pourrait aussi être '(+ (pomme poire) + (jus de tarte macintosh roulement strudel))' :) –