在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。
答案 0 :(得分:0)
请勿使用'%'或'*'表示“未选择条件”。而是修改查询以删除WHERE...
。是的,这将需要应用程序代码,但它将避免您的问题并加快速度。