2016-11-27 6 views
0

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.

Antwort

0

Verwenden Sie nicht "%" oder "*", um "kein Kriterium ausgewählt" anzuzeigen. Ändern Sie stattdessen die Abfrage, um das WHERE... zu entfernen. Ja, dies erfordert Anwendungscode, aber es wird Ihr Problem vermeiden und die Dinge beschleunigen.

+0

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? –

+0

Ja, aber es ist '... AGAINST ('term *' ...)', aber ich glaube nicht, dass du einfach '* 'haben kannst, daher musst du Code schreiben. –

+0

So ist es nicht möglich? :( –

Verwandte Themen