[MySQL] Volltextsuche (Prepared Statement)

B

ByeBye 242513

Guten Tag,
ich möchte gerne eine Volltextsuche mit Prepared Statement realisieren. Mit meiner jetzigen Lösung wird entweder firstname oder lastname durchsucht. Wie bekomme ich die Volltextsuche realisiert?

PHP:
$search = '%'.$search.'%';
$sql = 'SELECT
          ID,
          firstname,
          lastname
        FROM
          user
        WHERE
          firstname OR
          lastname
        LIKE
          ?';
if($stmt = $db->prepare($sql)) {
  $stmt->bind_param('s', $search);
  $stmt->execute();
  $stmt->bind_result($id, $firstname, $lastname);
  while($stmt->fetch()) {
    ....
  }
$stmt->close();
 
Code:
 firstname OR lastname LIKE '%text%'
Entweder ist firstname true, oder lastname like %text%. Aber im firstname wird nicht gesucht.

Ich sehe grad spontan die folgenden 3 Möglichkeiten:

1) Du kannst beide mit LIKE prüfen (den Suchstring musst du 2 mal übergeben oder du arbeitest mit benannten Parametern
SQL:
WHERE firstname LIKE ? OR lastname LIKE ?

2) Du setzt First und lastname zusammen
SQL:
WHERE CONCAT(firstname, lastname) LIKE ?

3) und meiner Meinung nach die beste, verwende die Fulltextsuche von MySQL: MATCH AGAINST
Nicht vergessen, einen FULLTEXTINDEX über firstname und lastname zu legen.
SQL:
WHERE MATCH(firstname, lastname) AGAINST(?)[/vode]
 
Moin Yaslaw,

ja nee, bei deinen drei spontanen Lösungsansätzen (die als freie Assoziationsketten natürlich vollkommen in Ordnung sind) sollte noch eine kleine Wertung nachgeschoben werden.

Entweder ist firstname true, oder lastname like %text%. Aber im firstname wird nicht gesucht.
Richtig - ich hab genauso gelacht wie du wahrscheinlich.

Ebenfalls richtig ist Ansatz 2 mit einer LIKE-Suche im konkatenierten String.

Aber:
Lösung 1 ist auf Performanzgründen eine absolut theoretische Lösung, falls Kollege Bad Request mehr als sieben Datensätze hat.

Und Lösung 3 - na hömma..
Da bist du ihm auf den Leim gegegangen, weil er irgendwo die Sprechblase "Volltextsuche" aufgeschnappt und hier in den Ring geworfen hat.
Wer sollte denn auf die Felder Vorname/Nachname (wahrscheinlich je 20 Zeichen lang) einen FULLTEXTINDEX legen und wozu???

"Volltextsuche" ist a) durchaus sinnvoll aber b) janz watt anderes als de Jung braucht.

@Baddy
Nimm Yaslaws Lösung 2 und bring bitte auch mal deine andere offene Frage zu irgendeinem Abschluss.

Grüße
Biber
 

Neue Beiträge

Zurück