In einem FTS Zustand, wie ich etwas ähnliches wie dies tun würde:MySQL Volltextsuche. Erhalten Sie alle Datensätze
SELECT * FROM students WHERE student_first_name LIKE "%" OR student_last_name LIKE "%" ...
Meine aktuelle Abfrage ist:
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)
aber es gibt mir einen Fehler.
#1064 - syntax error, unexpected $end, expecting FTS_TERM or FTS_NUMB or '*'
Ich versuchte, die IN BOOLEAN MODE
zu entfernen, es funktioniert, aber keine Datensätze abgerufen werden.
Ich möchte alle Datensätze abrufen, wenn der Suchtext leer ist.
Die *
in der AGAINST
Klausel wird mit der Suchzeichenfolge verknüpft.
z.B. . Ich benutze übrigens PDO.
Was ich meinte war, wenn der Suchtext leer ist, möchte ich alle Datensätze anzeigen. In einer LIKE-Bedingung wird das WHERE-Feld LIKE '%' alle Datensätze abrufen. Wenn der Suchtext nicht leer ist, wird es 'WHERE Feld LIKE 'searchText%'' sein und relevante Datensätze abrufen. Wie kann ich mit der 'FULLTEXT SEARCH' Bedingung' MATCH ... AGAINST' etwas Ähnliches machen? –
Ja, aber es ist '... AGAINST ('term *' ...)', aber ich glaube nicht, dass du einfach '* 'haben kannst, daher musst du Code schreiben. –
So ist es nicht möglich? :( –