2012-01-21 3 views
2

до сих пор я следующий запрос 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', чтобы создать представление ваших двух таблиц и использовать представление в вашем как вы делали бы с 'pages' –

+0

Вы действительно должны объяснить, что вы имеете в виду более четко. Например, вы должны дать этой другой таблице имя - в противном случае каждый (любой), отвечающий, должен изобрести имя для него. Он никогда не причинит вреда, чтобы явно указать соответствующее подмножество столбцов в таблице; как это, мы должны решить, что таблица 'Pages' имеет столбцы' Title', 'Content_Plain_Text' и' Active'. Вы сказали, что другие таблицы имеют одинаковые столбцы? Максимальное ранжирование выполняется по обеим таблицам. Вам действительно нужен нормализованный счет из запроса? Ваш инструмент отчетности должен быть в состоянии сделать это. –

+0

@bbeckford: Ваша проблема решена? Пожалуйста, уточните ваши требования. –

ответ

0

Я бы просто 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 
Смежные вопросы