2016-05-25 2 views
1

私はインターンシップのために複数のMySQLテーブルを調べる必要があります。 実際、私はこれをWeb電話のディレクトリにします。私は研究に入るためのフォームテキスト入力を持っています。 MATCH/AGAINST構文を使用しようとしましたが、間違っているようです。 私のクエリは実際にはそのいずれかになります。MySQL 5.7.9 WAMPのSphinxを使った複数のテーブルでの全文調査

SELECT U_ID, 'users' 
from users 
where match ([columns that I want to search in]) AGAINST ([The text inside my search field]) 

UNION 

SELECT S_ID, 'service' 
from service 
where match ([columns that I want to search in]) AGAINST ([The text inside my search field]) 

この問題は以下の通りです:私は、関連する結果を持つことができないので、検索のこのタイプでは、私は理由に対する複数の(多くの試合で変数を送信する必要があります要素)。完璧な解決策は、 'UN'を 'INTER'に置き換えることですが、それは簡単すぎるでしょう。 それが便利になります場合、私は知らないが、私は解決策を検索してみましたが、私は私のための1つを見つけることができませんでしペソ

と私のクエリを送信するためにPDOを使用します。

https://dev.mysql.com/doc/refman/5.5/en/fulltext-search.html
Using Full-Text Search in SQL Server 2008 across multiple tables, columns
MySQL fulltext search on multiple tables with different fields

は、それから私は、スフィンクスを使用しようとしましたが、ドキュメントには、私には複雑であり、私は(http://sphinxsearch.com/docs/current.htmlを)それを理解できませんでした。

私が必要とする質問を見つけるのを手伝ってくれる人や、Windows上で非常にクリアでシンプルなSphinxチュートリアルのリンクを教えてもらえますか(私はIBMの記事を読んでいます)?

編集:

私は集合論(インター平均交点)と私の問題を説明したかったです。 たとえば、フォーム入力で「John accounting department」と入力すると、Johnという名前のすべてのユーザーが会計部門に属している場合にのみ表示します。 私の実際の検索では、 "John"または "accounting"または "department"という名前のすべての部門のIDと、 "John"またはaccounting "またはdepartment"という名前のすべてのIDを取得します。 それは私の実際の問題です。

+0

[INTER]とは何ですか?あなたはまた、[関連する結果を得ることはできません]を展開する必要があります。サンプルクエリはうまくいくはずですが、本当に**問題が**あるのはそれほど説明できません。 – barryhunter

答えて

0

私はマテリアライズドビューと考えています。これはMySQLでこれを解決する最も簡単な方法です。

厳密にはmysqlの機能ではありません(つまり、mysql cantはビューを自動的に保持しますが、実際はビューではありません)。通常のテーブルです。他のテーブルのコピーです。

は、実際には...非常に簡単に作成することができます

CREATE TABLE my_search_view (fulltext(U_Name,S_Name)) 
    SELECT U_ID, U_Name, S_ID, S_Name 
    FROM user 
    INNER JOIN service USING (S_ID); 

(あなたがソース表を更新する場合は、単にテーブルを削除し、それを再作成!よりダイナミックなソリューションをしたい場合は、トリガーを使用することができますが、しかしによってデータのサイズが、それおそらくない努力の価値)

今、あなたは、単にこのテーブルに対してクエリを実行することができます(これは、フルテキストインデックスを持つ)

SELECT * 
FROM my_search_view 
WHERE MATCH (U_Name,S_Name) AGAINST ('John accounting department') 
+0

私はそのクエリのポイントを参照してください、しかし、あなたがS_IDとS_Nameをユーザテーブルから選択しようとしたので動作しません(私はmysqlエラーを取得します)。 – Kyron

+0

もちろん列が実際に呼び出されるものに合わせて調整する必要があります。これはJOINなので** **テーブルのいずれかからのカラムを使用できます。 – barryhunter

関連する問題