全文検索に初めて挑戦しましたが、クエリがうまく機能しません。これが私が試してきた新しいコードです(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" テーブルには姓と名の別々の列があります。
これを回避する最善の方法は何ですか?
私のテーブル構造は次のとおりです。
- マスター (13 列のメイン テーブル)
- スピーカー(6列)
- キャンプ(3列)
- シリーズ (6 列)
- 件名 (2 列)
現在のコードでは、検索を実行すると同時に、検索に直接関連しないすべての余分な情報を選択していました。これらのビット (すべての「id」フィールドなど) を使用して、必要なすべての情報を出力するためです。ここに見られる結果:
追加のクエリが必要ですか、それとも完全に間違った方法で行っていますか?
ご協力ありがとうございました。