另一个表添加到MySQL查询

问题描述:

到目前为止,我下面的SQL查询它的伟大工程:另一个表添加到MySQL查询

SELECT *, 
    MATCH(title, content_plain_text) AGAINST ('$searchTerm') AS score, 
    (MATCH(title, content_plain_text) AGAINST ('$searchTerm')/maxScore) AS normalisedScore 
FROM pages, 
    (SELECT MAX(MATCH(title, content_plain_text) AGAINST ('$searchTerm')) AS maxScore 
    FROM pages) maxScoreTable 
    WHERE MATCH(title, content_plain_text) AGAINST ('$searchTerm') 
    AND active = 1 
    ORDER BY score DESC 

所以现在我想搜索另一个表具有相同的字段名称也一样,我怎么去,虽然保持排名等?

谢谢!

+1

我想你可以使用'union'来创建两个表的视图,并使用该视图中的查询,你会用'页面' –

+0

你应该真正解释你的意思,而不是更清楚。例如,你应该给这个其他表格命名 - 否则,每个人(任何人)都必须为它发明一个名称。明确地给出表中相关列的子集绝不会造成任何伤害;实际上,我们必须弄清楚'Pages'表有'Title','Content_Plain_Text'和'Active'列。你说其他表具有相同的列?最高排名是跨两个表。你真的需要查询中的归一化分数吗?您的报告工具应该能够做到这一点。 –

+0

@bbeckford:你的问题解决了吗?请详细说明您的要求。 –

我只是union all你的pages表与其他表(让我们假设它叫more_pages)。

WITH构造真的很适合这样的问题,但不幸的是MySQL不支持它。 最优雅的替代我能想出是创建一个视图来封装这个联盟:

CREATE VIEW all_pages AS 
SELECT * FROM pages 
UNION ALL 
SELECT * FROM more_pages 


SELECT *, 
    MATCH(title, content_plain_text) AGAINST ('$searchTerm') AS score, 
    (MATCH(title, content_plain_text) AGAINST ('$searchTerm')/maxScore) AS normalisedScore 
FROM all_pages, 
    (SELECT MAX(MATCH(title, content_plain_text) AGAINST ('$searchTerm')) AS maxScore 
    FROM all_pages) maxScoreTable 
    WHERE MATCH(title, content_plain_text) AGAINST ('$searchTerm') 
    AND active = 1 
    ORDER BY score DESC