2016-11-27 59 views
0

在FTS的条件,我将如何做类似这样的:MySQL全文搜索。获取所有记录

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子句中将与搜索字符串一起串联。

例如AGAINST('mysearch*' IN BOOLEAN MODE)。顺便说一句,我正在使用PDO。

回答

0

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

+0

我的意思是,如果传递的搜索文本是空的,我想显示所有的记录。在LIKE条件下,WHERE字段LIKE'%'将检索所有记录。如果搜索文本不是空的,那么它将是'WHERE field LIKE'searchText%''并检索相关记录。我怎样才能做到类似于'FULLTEXT SEARCH'条件'MATCH ... AGAINST'? –

+0

是的,但它是'...反对('term *'...)',但我不认为你可以简单地使用'*'',因此需要编写代码。 –

+0

所以这是不可能的? :( –