解決策は、3 つの選択の UNION です。しかし、最初にそれらを分析しましょう。
これまでのところ、
SELECT *, {formula} AS relevance FROM content WHERE {cond} ORDER BY relevance DESC
ここで、さらに 2 つの選択が必要になります。
SELECT *, {formula} AS relevance FROM trade_members WHERE {cond} ORDER BY relevance DESC
SELECT *, {formula} AS relevance FROM news WHERE {cond} ORDER BY relevance DESC
これら 3 つのステートメントを個別に実行すると、異なる列が返されることがわかります。次に、それらの列を統合する必要があります。テーブル構造についての詳細がなければ、それがどのように見えるかについてのヒントを提供することしかできません.
SELECT 'content' as type, contentID as id, strTitle as title, txtContent as content, {formula} AS relevance FROM content WHERE {cond} ORDER BY relevance DESC
SELECT 'member' as type, memberID as id, company_name as title, contact_name as content, {formula} AS relevance FROM trade_members WHERE {cond} ORDER BY relevance DESC
SELECT 'news' as type, newsID as id, news_title as title, news_content as content, {formula} AS relevance FROM news WHERE {cond} ORDER BY relevance DESC
これで、3 つすべての選択で同様の結果が得られるはずです。さらに重要なことは、3 つすべてで同じ列名が表示され、各行でデータベース内のどのデータを表しているかを識別できるようになるはずです。コンテンツ 17、つまり会社 33、ニュース 1776 です。
これで、3 つすべてに対してユニオンを実行できます。
(1st select) UNION (2nd select) UNION (3rd select) ORDER BY relevance DESC
ただし、ファイルの並べ替えが必要な4 つの一時テーブルを実際に作成しているため、これはかなり遅くなる可能性があることに注意してください。実際には必要ありません。