向mySQL查询添加另一个表

向mySQL查询添加另一个表,mysql,sql,Mysql,Sql,到目前为止,我有以下非常有效的SQL查询: 选择*, 以“$searchTerm”作为分数的匹配标题、内容\u纯文本, 将“$searchTerm”/maxScore作为normalisedScore进行匹配标题、内容\u纯文本 从书页上看, 根据“$searchTerm”选择MAXMATCHtitle、内容\u纯文本作为maxScore 从maxScoreTable页 其中,根据“$searchTerm”匹配标题、内容\u纯文本 和活动=1 按分数顺序描述 所以现在我想搜索另一个具有相同字段名

到目前为止,我有以下非常有效的SQL查询:

选择*, 以“$searchTerm”作为分数的匹配标题、内容\u纯文本, 将“$searchTerm”/maxScore作为normalisedScore进行匹配标题、内容\u纯文本 从书页上看, 根据“$searchTerm”选择MAXMATCHtitle、内容\u纯文本作为maxScore 从maxScoreTable页 其中,根据“$searchTerm”匹配标题、内容\u纯文本 和活动=1 按分数顺序描述 所以现在我想搜索另一个具有相同字段名的表,如何在保持排名等的同时进行搜索

谢谢

我只需将您的所有页面表与其他表合并,让我们假设它被称为“更多页面”

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
我只是将您的所有页面表与另一个表合并,让我们假设它被称为more_页面

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

我认为您可以使用一个联合来创建两个表的视图,并在查询中使用该视图,就像您对页面所做的那样。您应该更清楚地解释您的意思。例如,您应该为另一个表命名—否则,每个回答的人都必须为它命名。明确给出表中列的相关子集绝对不会有任何坏处;实际上,我们必须确定Pages表中有Title、Content、Plain和Active列。你说其他表有相同的列?两个表的排名最高。您真的需要查询中的标准化分数吗?您的报告工具应该能够做到这一点。@bbeckford:您的问题解决了吗?请详细说明您的要求。我认为您可以使用联合来创建两个表的视图,并在查询中使用该视图,就像您对页面所做的那样。您应该更清楚地解释您的意思。例如,您应该为另一个表命名—否则,每个回答的人都必须为它命名。明确给出表中列的相关子集绝对不会有任何坏处;实际上,我们必须确定Pages表中有Title、Content、Plain和Active列。你说其他表有相同的列?两个表的排名最高。您真的需要查询中的标准化分数吗?您的报告工具应该能够做到这一点。@bbeckford:您的问题解决了吗?请详细说明您的要求。