Guma: SQL -> Suchabfrage mit mehreren Worten

Hallo Zusammen,

ich überlege mir gerade wie ich ein Suchfeld mit mehreren Worten auslesen kann und mit ODER die passenden Datenbankeinträge ausgebe.

Ich fange einfach mal an...

Zerlegen der suchbegriffe

$words     = "Auto Motorrad";
$w = explode(" ", $words);

Where klausel bauen ....

$where = "";
reset($w);
while (list($k, $v) = each($w)) {
  $where .= sprintf(" typ like '%%%s%%' or ", $v);
}

Query

$query = sprintf("select typ from mytable where %s", $where);

Kann mich das ans Ziel bringen? Ich komme hier nicht weiter. Wie kann ich z.B. mehr als zwei Worte berücksichtigen? Mir fehlt da eine einfache Lösung.

Grüße von Guma

  1. Hallo Forum,

    ich überlege mir gerade wie ich ein Suchfeld mit mehreren Worten auslesen kann und mit ODER die passenden Datenbankeinträge ausgebe.

    Query

    $query = sprintf("select typ from mytable where %s", $where);

    Kann mich das ans Ziel bringen? Ich komme hier nicht weiter. Wie kann ich z.B. mehr als zwei Worte berücksichtigen? Mir fehlt da eine einfache Lösung.

    Du hast ein Problem mit SQL, der PHP-Code interessiert daher niemanden.
    Lass bitte das SQL-Statement, das an dein DBMS geschickt wird ausgeben und poste es hier.

    Außerdem solltest du dich mit SQL-Injection befassen, dein Code erlaubt z.B., dass sich jemand die komplette Tabelle ausgeben lässt.

    Desweiteren interessieren mich Name und genaue Versionsnummer deines DBMS.

    Gruß
    Alexander Brock

  2. Hallo nochmal, ich konnte auch die Volltextsuche nicht zum laufen bringen. Die sieht so aus. ich nutze MySQL 5.0

    SELECT titel FROM fahrzeuge
    WHERE  MATCH typ AGAINST ('Auto Motorrad ')
    Was mache ich nur falsch=?

    Guma

    1. hi,

      SELECT titel FROM fahrzeuge
      WHERE  MATCH typ AGAINST ('Auto Motorrad ')
      Was mache ich nur falsch=?

      Woher zum Geier sollen wir das wissen, wenn du uns noch nicht einmal eine Fehlermeldung mitteilst, sondern uns stattdessen mit Unsinn á la "konnte ich nicht zum Laufen bringen" kommst?

      Tipps für Fragende - solltest du doch aber inzwischen eigentlich kennen.

      gruß,
      wahsaga

      --
      /voodoo.css:
      #GeorgeWBush { position:absolute; bottom:-6ft; }
      1. Hallo Wahsager,

        MySQL 5.0 meldet bei mir:

        #1191 - Can't find FULLTEXT index matching the column list

        wenn ich per PHPMyAdmin fogendes eingebe:
        SELECT titel FROM fahrzeuge
        WHERE  MATCH typ AGAINST ('Auto Motorrad ')

        Es grüßt Guma

        1. hi,

          MySQL 5.0 meldet bei mir:

          #1191 - Can't find FULLTEXT index matching the column list

          Und was sagt dir das?
          Hast du versucht, es dir zu übersetzen?

          gruß,
          wahsaga

          --
          /voodoo.css:
          #GeorgeWBush { position:absolute; bottom:-6ft; }
          1. Hey,

            Und was sagt dir das?
            Hast du versucht, es dir zu übersetzen?

            Übersetzen bringt doch primär gar nix. In google eingeben und die Lösung konsumieren.

            Tschö

  3. echo $begrüßung;

    Where klausel bauen ....

    $where = "";
    reset($w);
    while (list($k, $v) = each($w)) {
      $where .= sprintf(" typ like '%%%s%%' or ", $v);
    }
    Kann mich das ans Ziel bringen?

    Nicht ganz. Du hast pro Suchwort ein "or" hintendran hängen. Das ist beim letzten Begriff zu viel. Eleganter als das nachträgliche Abschneiden ist es, die Werte aus dem Array von implode() und einem passenden String als "Klebstoff" dazwischen für die WHERE-Klausel zusammensetzen zu lassen.

    echo "$verabschiedung $name";