Superheld: MYSQL-Abfrage => DB Eintrag mehrere Wörter

Hallo zusammen,

ich hänge an einer Sache und vielleicht finde ich hier Hilfe.
Ich durchsuche meine DB nach dem folgenden Muster:
$name kommt aus einem Form.

  
<?php  
SELECT * FROM Datenbank WHERE name LIKE '%".addslashes( $name)."%'  
?>  

Soweit so gut.
Ein DB-Eintrag (Beispiel) "name" sieht so aus: "Hans Meyer aus Hessen".

Falls nun jemand nach "essen" (den Ort) sucht erscheint auch "Hans Meyer aus Hessen" weil "essen" ja Bestandteil von "Hessen" ist.

Änder ich nun die Abfrage zu (Prozentzeichen entfernt)

  
<?php  
SELECT * FROM Datenbank WHERE name LIKE '".addslashes( $name)."'  
?>  

und es sucht jemand nach "Hessen" bekommt er "Hans Meyer aus Hessen" nicht angezeigt => weil die %-Zeichen ja für den gesamten Inhalt des Feldes "name" stehen.

Wie kann ich nach genauen Worten innerhalb des Feldes "name" suchen?

Vielen Dank

  1. Hallo,

    mit den Mysql-Stringfunktionen solltest du in der Lage sein, spezialisierte Abfragen zu Stande zu bringen.
    Wenn du entschuldigst, aber ohne deine Anwendung zu kennen, behaupte ich, dass dein Datendesign grottenschlecht zu sein scheint, da es ja nicht mal der ersten Normalform entspricht.
    Darüberhinaus kennst du wahrscheinlich auch die Argumente bezüglich "SELECT *".

    Markus

  2. Hi,

    Wie kann ich nach genauen Worten innerhalb des Feldes "name" suchen?

    Beispielsweise mit regulaeren Ausdruecken - in dem du verlangst, dass davor und dahinter ein nicht-Wort-Character steht.
    Dass das von der Performance her nicht sonderlich guenstig ist, sollte aber klar sein.

    MfG ChrisB

    --
    „This is the author's opinion, not necessarily that of Starbucks.“
  3. Moin

    Als "mächtigere" Variante stünde dir auch die MySQL_Volltextsuche zur Verfügung.

    Gruß Bobby

    --
    -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <-
    -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <-
    ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
    1. Moin

      Als "mächtigere" Variante stünde dir auch die MySQL_Volltextsuche zur Verfügung.

      Gruß Bobby

      Vielen Dank,
      die Volltextsuche ist wohl die vernünftigste Lösung...