2010-07-07 8 views
6

Estoy tratando de devolver los resultados MATCH() CONTRA() CONTRA() contra varias tablas usando UNIONES, el único problema es que algunas filas devuelven una relevancia de 0, quiero excluirlas. Después de los sindicatos es que hay una manera de utilizar 'DONDE relevancia> 0'Utilizando una cláusula WHERE global al usar UNIONES en sql

A continuación se muestra un poco de mi 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 

Entonces, ¿hay alguna forma de añadir DONDE relevancia> 0 antes de que el ORDER BY

muchas gracias

Respuesta

4

Trate de usar una tabla derivada

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. Cabe señalar que su pregunta original decía "excluir casos donde la relevancia es 0", pero su cláusula psuedo where dice '> 0'. Solo una nota –

+0

Eso funcionó de manera excelente, muchas gracias – wiggles

2

se podría añadir i t para cada consulta o al final:

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 
Cuestiones relacionadas