2016-11-27 4 views
0

を取得:MySQLフルテキスト検索。どのように私はこのような類似した何かをするだろう、FTS条件ですべてのレコード

SELECT * 
FROM 
    (SELECT cs.student_id, 
      cs.class_id, 
      s.student_id_no, 
      s.student_image, 
      s.student_first_name, 
      s.student_middle_name, 
      s.student_last_name, 
      s.student_year, 
      s.student_section, 
      s.student_email_address, 
      s.student_contact_no 
    FROM `class_students` cs 
    JOIN classes cls ON cs.class_id = cls.class_id 
    JOIN students s ON cs.student_id = s.student_id 
    WHERE cls.class_id = 1 
    AND cls.teacher_id = 1 
    AND is_enrolled = 1) AS s 
WHERE MATCH(s.student_id_no, s.student_first_name, s.student_middle_name, s.student_last_name, s.student_email_address, s.student_contact_no) AGAINST ('*' IN BOOLEAN MODE) 

が、それは私にエラーを与える:

SELECT * FROM students WHERE student_first_name LIKE "%" OR student_last_name LIKE "%" ...

私の現在のクエリがあります。

#1064 - syntax error, unexpected $end, expecting FTS_TERM or FTS_NUMB or '*'

は、私はそれが動作しますが、レコードが取得されていない、 IN BOOLEAN MODEを削除しようとしました。

検索テキストが空の場合は、すべてのレコードを取得します。

AGAINST節の*は、検索文字列とコンカチネーションされます。

AGAINST('mysearch*' IN BOOLEAN MODE)。私は途中でPDOを使用しています。

答えて

0

「条件が選択されていません」を示すには、 '%'または '*'を使用しないでください。代わりに、クエリを変更してWHERE...を削除します。はい、これにはアプリケーションコードが必要ですが、問題が回避され、処理速度が向上します。

+0

私が意図したことは、渡された検索テキストが空の場合、すべてのレコードを表示したいと思います。 'LIKE'条件では、' WHERE field LIKE '%' 'はすべてのレコードを検索します。検索テキストが空でない場合は、 'WHERE field LIKE 'searchText%''となり、関連するレコードを取得します。 'FULLTEXT SEARCH'条件' MATCH ... AGAINST'と同様のことをどうすればできますか? –

+0

はい、それは '... AGAINST( 'term *' ...)'ですが、単純に ''*''を持つことはできないと思いますので、コードを書く必要があります。 –

+0

それはできないのですか? :( –

関連する問題