2010-07-07 13 views
6

J'essaie de retourner les résultats MATCH() AGAINST() sur plusieurs tables en utilisant UNIONS, le seul problème est que certaines lignes renvoient une pertinence de 0, je veux les exclure. Après les syndicats est-il un moyen d'utiliser « WHERE pertinence> 0 »Utilisation d'une clause WHERE globale lors de l'utilisation de UNIONS dans sql

Ci-dessous est un peu de mon SQL

SELECT pages.content AS search, page_info.url AS link, MATCH(pages.content) AGAINST('Wales') as relevance 
FROM page_content 
LEFT JOIN pages ON (page_info.page = pages.id) 

UNION 

SELECT products_real.name AS search, products_real.event AS link, MATCH(products_real.name, products_real.description) AGAINST ('Wales') as relevance 
FROM product_real 

ORDER BY relevance DESC 

Ainsi est-il que je peux quand même ajouter WHERE pertinence> 0 avant la ORDER BY

merci beaucoup

Répondre

4

Essayez d'utiliser une table dérivée

SELECT * 
FROM 
    (SELECT 
    pages.content AS search, 
    page_info.url AS link, 
    MATCH(pages.content) AGAINST('Wales') as relevance 
    FROM page_content 
    LEFT JOIN pages ON (page_info.page = pages.id) 
    UNION 
    SELECT 
    products_real.name AS search, 
    products_real.event AS link, 
    MATCH(products_real.name, products_real.description) AGAINST ('Wales') as relevance 
    FROM product_real) myQuery 
Where myQuery.relevance <> 0 
ORDER BY myQuery.relevance DESC 
+0

Hum. Il convient de noter que sa question initiale disait 'exclure les cas où la pertinence est 0' mais son psuedo où la clause dit '> 0'. Juste une note –

+0

Cela a fonctionné très bien, merci beaucoup – wiggles

2

vous pouvez ajouter i t à chaque requête ou à la fin:

SELECT pages.content AS search, page_info.url AS link, MATCH(pages.content) AGAINST('Wales') as relevance 
FROM page_content 
LEFT JOIN pages ON (page_info.page = pages.id) 
WHERE relevance > 0 

UNION 

SELECT products_real.name AS search, products_real.event AS link, MATCH(products_real.name, products_real.description) AGAINST ('Wales') as relevance 
FROM product_real 
WHERE relevance > 0 

ORDER BY relevance DESC 



SELECT search, relevance FROM 
(

SELECT pages.content AS search, page_info.url AS link, MATCH(pages.content) AGAINST('Wales') as relevance 
FROM page_content 
LEFT JOIN pages ON (page_info.page = pages.id) 

UNION 

SELECT products_real.name AS search, products_real.event AS link, MATCH(products_real.name, products_real.description) AGAINST ('Wales') as relevance 
FROM product_real 
) D 
WHERE relevance > 0 
ORDER BY relevance DESC