MySQL全文搜索。获取所有记录

时间:2016-11-27 16:18:20

标签: mysql

在FTS条件下,我将如何做类似的事情:

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

我目前的查询是:

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)

但它给了我一个错误。

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

我尝试删除IN BOOLEAN MODE,但它有效,但没有检索到任何记录。

如果搜索文本为空,我想检索所有记录。

*子句中的AGAINST将与搜索字符串一起使用。

e.g。 AGAINST('mysearch*' IN BOOLEAN MODE)。我顺便使用PDO。

1 个答案:

答案 0 :(得分:0)

请勿使用'%'或'*'表示“未选择条件”。而是修改查询以删除WHERE...。是的,这将需要应用程序代码,但它将避免您的问题并加快速度。