0

全文検索に初めて挑戦しましたが、クエリがうまく機能しません。これが私が試してきた新しいコードです(PHPファイルから):

$browse_all_query = "(SELECT master_id, title, series_id, series_number, year, date, day, month, speaker_id, speaker2_id, speaker3_id " .
                    "FROM master " .
                    "WHERE MATCH (title) AGAINST ($where_clause)) " .
                    "UNION " .
                    "(SELECT camp_name, camp_id " .
                    "FROM camp " .
                    "WHERE MATCH (camp_name) AGAINST ($where_clause)) " .
                    "UNION " .
                    "(SELECT subject_name, subject_id " .
                    "FROM subject " .
                    "WHERE MATCH (subject_name) AGAINST ($where_clause)) " .
                    "UNION " .
                    "(SELECT speaker_id, s_title, f_name, m_name, l_name, l_name2 " .
                    "FROM speaker " .
                    "WHERE MATCH (s_title, f_name, m_name, l_name, l_name2) AGAINST ($where_clause)) " .
                    "UNION " .
                    "(SELECT series_title, series_id " .
                    "FROM series " .
                    "WHERE MATCH (series_title) AGAINST ($where_clause)) ";

ここで、私にとって大きな問題は、選択ステートメントの列数とデータ型が異なることです。私が必要としているのは、選択したすべての列から必要なすべての情報を引き出しながら、全文検索を使用する方法を理解することです。これはオンラインのオーディオ ライブラリです。私は今、通常の WHERE/LIKE 設定を使用していますが、残念ながらその方法を使用して、1 人の話者の名前 (Glenn Clark) を検索すると、キーワードをサニタイズして分離する際に使用されている場所に「glenn」と「clark」の結果が表示されます。 ...言うまでもなく、"speaker" テーブルには姓と名の別々の列があります。

これを回避する最善の方法は何ですか?

私のテーブル構造は次のとおりです。

  1. マスター (13 列のメイン テーブル)
  2. スピーカー(6列)
  3. キャンプ(3列)
  4. シリーズ (6 列)
  5. 件名 (2 列)

現在のコードでは、検索を実行すると同時に、検索に直接関連しないすべての余分な情報を選択していました。これらのビット (すべての「id」フィールドなど) を使用して、必要なすべての情報を出力するためです。ここに見られる結果: ここに画像の説明を入力

追加のクエリが必要ですか、それとも完全に間違った方法で行っていますか?

ご協力ありがとうございました。

4

0 に答える 0