Nina: Aufzählung generieren / Code vereinfachen

Hallo Ihr lieben,

zur Zeit benutze ich folgenden Code um Daten aus einer Datenbank auszugeben, dabei sind zwei Suchbegriffe ($begriff1 und $begriff2) möglich, die die Felder vorname, name, bez, plz, ort durchsuchen:

WHERE
tabX.vorname LIKE '%$begriff1%' AND tabX.name LIKE '%$begriff2%'
OR
tabX.vorname LIKE '%$begriff1%' AND tabX.bez LIKE '%$begriff2%'
OR
tabX.vorname LIKE '%$begriff1%' AND tabX.plz LIKE '%$begriff2%'
OR
tabX.vorname LIKE '%$begriff1%' AND tabX.ort LIKE '%$begriff2%'

OR

tabX.name LIKE '%$begriff1%' AND tabX.vorname LIKE '%$begriff2%'
OR
tabX.name LIKE '%$begriff1%' AND tabX.bez LIKE '%$begriff2%'
OR
tabX.name LIKE '%$begriff1%' AND tabX.plz LIKE '%$begriff2%'
OR
tabX.name LIKE '%$begriff1%' AND tabX.ort LIKE '%$begriff2%'

OR

tabX.bez LIKE '%$begriff1%' AND tabX.vorname LIKE '%$begriff2%'
OR
tabX.bez LIKE '%$begriff1%' AND tabX.name LIKE '%$begriff2%'
OR
tabX.bez LIKE '%$begriff1%' AND tabX.plz LIKE '%$begriff2%'
OR
tabX.bez LIKE '%$begriff1%' AND tabX.ort LIKE '%$begriff2%'

OR

tabX.plz LIKE '%$begriff1%' AND tabX.vorname LIKE '%$begriff2%'
OR
tabX.plz LIKE '%$begriff1%' AND tabX.name LIKE '%$begriff2%'
OR
tabX.plz LIKE '%$begriff1%' AND tabX.bez LIKE '%$begriff2%'
OR
tabX.plz LIKE '%$begriff1%' AND tabX.ort LIKE '%$begriff2%'

OR

tabX.ort LIKE '%$begriff1%' AND tabX.vorname LIKE '%$begriff2%'
OR
tabX.ort LIKE '%$begriff1%' AND tabX.name LIKE '%$begriff2%'
OR
tabX.ort LIKE '%$begriff1%' AND tabX.plz LIKE '%$begriff2%'
OR
tabX.ort LIKE '%$begriff1%' AND tabX.ort LIKE '%$begriff2%'

Kann man das ganze nicht mit "ein paar Schleifen" automatisch generieren lassen? Mit dem Hintergrund, dass ich noch mehrere Begriffe ($begriff3, $begriff4, ...) und auch zu durchsuchende Felder leicht bei Bedarf hinzufügen kann.

Es wär supertoll, wenn jemand mir helfen zu können - ich habe nicht so viel Erfahrung mit PHP.
Vielen Vielen Dank,
Nina

  1. WHERE
    tabX.vorname LIKE '%$begriff1%' AND tabX.name LIKE '%$begriff2%'
    OR
    tabX.vorname LIKE '%$begriff1%' AND tabX.bez LIKE '%$begriff2%'
    OR
    tabX.vorname LIKE '%$begriff1%' AND tabX.plz LIKE '%$begriff2%'
    OR
    tabX.vorname LIKE '%$begriff1%' AND tabX.ort LIKE '%$begriff2%'

    warum führst du diese Abfrage 5x durch?? das "OR" macht das für dich!!

    mit schleifen durchlaufen? kein problem

    while ( $i<$Gesamtanzahl )
    {
     $Query = " tabX.vorname LIKE '%$eins[$i]%' AND tabX.name LIKE '%$zwei[$i]%' ";
     $Query = " OR tabX.vorname LIKE '%$eins[$i]%' AND tabX.bez LIKE '%$zwei[$i]%' ";
     $Query = " OR tabX.vorname LIKE '%$eins[$i]%' AND tabX.plz LIKE '%$zwei[$i]%' ";
     $Query = " OR tabX.vorname LIKE '%$eins[$i]%' AND tabX.ort LIKE '%$zwei[$i]%' ";
    $i++;
    }

    dh: du hast ein Array Namens eins und zwei

    alsO:

    hier dein Begriff eins für einen Schleifendurchgang
    eins[0] = "asdf";
    zwei[0] = "zweiterBEgriff";
    eins[1] = "erster 2. Begriff";
    zwei[0] = "zweiter 2. Begriff";

    usw...
    das kannst du natürlich auch durch ein Formular mit Arrays versenden...
    Nicht vergessen $Gesamtanzahl zB mit count(eins) anzugeben.

    cu

  2. ok hab mich verschaut!

    dann musst du halt auch die zu durchsuchenden Felder in ein Array geben und diese dann der Reihe nach durchlaufen lassen... so ähnlich, wie ich es schon gezeigt hab.

    das heißt dann, dass 2 Spalten immer übereinstimmen müssen - versteh ich zwar nicht, was vorname UND plz gemeinsam haben könnten ;-)

    cu

    1. Hi,

      erstmal danke für Deine Hilfe - habs so probiert:

      $suchbegriffe = array("$begriff1","$begriff2");
      $suchfelder = array("vorname","name","bez");

      //Suchfelder
      for($x=0; $x<count($suchfelder); $x++)
      {
      $value = current($suchfelder);

      $suchfelder_sql .= "
      $value LIKE '%$suchbegriffe[0]%' AND vorname LIKE '%$suchbegriffe[1]%'
      OR
      $value LIKE '%$suchbegriffe[0]%' AND name LIKE '%$suchbegriffe[1]%'
      OR
      $value LIKE '%$suchbegriffe[0]%' AND bez LIKE '%$suchbegriffe[1]%'
      ";

      if($x+1!=count($suchfelder))
      {
      $suchfelder_sql .= "
      OR
      ";
      }

      next($suchfelder);
      }

      echo $suchfelder_sql;

      Allerdings ist das noch nicht das, was ich suche.
      Wenn ich mehrere $suchbegriffe im Array habe, dann muss ich auch den Code manuell ergänzen, genauso, wenn ich mehrere $suchfelder habe.

      Wie krieg ich das automatisch in??

      LG, Nina

  3. Hallo Nina,

    wie wärs damit (ungetestet):

    VERSION 1

    WHERE (
    tabX.vorname LIKE '%$begriff1%' OR
    tabX.bez LIKE '%$begriff1%' OR
    tabX.plz LIKE '%$begriff1%' OR
    tabX.ort LIKE '%$begriff1%'
    ) AND (
    tabX.vorname LIKE '%$begriff2%' OR
    tabX.bez LIKE '%$begriff2%' OR
    tabX.plz LIKE '%$begriff2%' OR
    tabX.ort LIKE '%$begriff2%'
    )

    VERSION 2 (## ist ein Trenner, der so nicht im String vorkommt)

    WHERE CONCAT_WS('##',tabX.vorname,tabX.bez,tabX.plz,tabX.ort)
    LIKE '%$begriff1%'
    AND
    CONCAT_WS('##',tabX.vorname,tabX.bez,tabX.plz,tabX.ort)
    LIKE '%$begriff2%'

    Gruß Olaf

    1. Hallo Olaf

      VERSION 1

      das ist ja das, was ich habe, nur als MySQL - ich möchte das aber automatisch generieren lassen, damit ich nicht - wenn sich die Anzahl der Suchbegriffe bzw. der Suchfelder ändert - immer den Code neuschreiben muss.

      VERSION 2 (## ist ein Trenner, der so nicht im String vorkommt)

      Das verstehe ich nicht was bedeutet das ## denn jetzt?

      LG, Nina