另一个表添加到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
所以现在我想搜索另一个表具有相同的字段名称也一样,我怎么去,虽然保持排名等?
谢谢!
答
我只是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
我想你可以使用'union'来创建两个表的视图,并使用该视图中的查询,你会用'页面' –
你应该真正解释你的意思,而不是更清楚。例如,你应该给这个其他表格命名 - 否则,每个人(任何人)都必须为它发明一个名称。明确地给出表中相关列的子集绝不会造成任何伤害;实际上,我们必须弄清楚'Pages'表有'Title','Content_Plain_Text'和'Active'列。你说其他表具有相同的列?最高排名是跨两个表。你真的需要查询中的归一化分数吗?您的报告工具应该能够做到这一点。 –
@bbeckford:你的问题解决了吗?请详细说明您的要求。 –