MySQL-Query erstellen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • MySQL-Query erstellen

    Hi,

    ich möchte eine möglichst flexibel einsetzbare Suchfunktion erstellen, am besten eine Klasse.

    Der Benutzer soll einen Suchbefehl in ein Inputfeld eingeben. Dieser Suchbefehl muss dann geparst werden. Es sollten Attribute wie +,-, AND, OR, Klammern etc. brücksichtigt werden. Das ist sehr kompliziert (vielleicht hat da ja jemand schon mal was gecodet)!

    Weiterhin ist eine Tabelle mit unterschiedlichen Feldtypen (Text, Int, VarChar etc.) gegeben. Es sollen nun alle Felder dieser Tabelle nach dem Suchstring durchsucht werden.

    Der Klasse sollte der Suchstring und der Tabellenname übergeben werden. Rückgabewert ist dann der entsprechende Query.

    Hat sich damit schonmal jemand beschäftigt?

    CU
    rivella

  • #2
    Hallo,

    ich hab sowas so in der Art, trifft deine Fragestellung nicht so 100%ig, aber geht in eine ähnliche Richtung:

    1. Meine Input-Felder im Suchformular sehen folgendermaßen aus:

    <input type="text" name="SET__tabelle__feld__AND[]">

    Also im Feldnamen wird eigentlich alles übergeben was man für eine Abfrage wissen muss, also Separator benutze ich 2 Unterstriche '__'

    2. Hab ich ne Funktion die den Übergebenen Feldnamen erstmal zerlegt anhand von '__' und daraus die WHERE Klausel erstellt. Dabei kommt dann folgendes raus:

    FIND_IN_SET('Suchwert', tabelle.feld)

    oder bei einem Feld das INT__tabelle__feld__AND[] heißt:

    tabelle.feld = Suchwert

    oder bei einem Feld das TEXT__tabelle__feld__AND[] heißt:

    tabelle.feld = 'Suchwert'

    Wenn der Input wie oben dargestellt öfter übergeben wird (darum als Array), dann greift auch noch der 4. Teil des Feldnamens, in diesem Fall AND (kann natürlich auch OR sein), dann wird dieser Teil geklammert und anhand des 4. Teils halt mit AND oder OR verknüpft:

    WHERE (FIND_IN_SET('$uebergenener_Wert', tabelle.feld) AND FIND_IN_SET('$uebergenener_Wert', tabelle.feld)

    So lasse ich die Querys eigentlich vollkommen automatisch erstellen, sogar die JOINs 'bauen' sich selber.

    Vielleicht ist das ja ein Denkansatz für dich

    Gruss
    Quetschi
    Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
    Schön - etwas Geschichte kann ja nicht schaden.
    Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

    Kommentar


    • #3
      Original geschrieben von Quetschi
      So lasse ich die Querys eigentlich vollkommen automatisch erstellen, sogar die JOINs 'bauen' sich selber.
      Das sehe ich aber anders. Es sei denn die Namen der Input-Felder werden ebenfalls dynamisch aus dem Systemkatalog der DB erzeugt.

      Kommentar


      • #4
        Original geschrieben von onemorenerd
        Das sehe ich aber anders. Es sei denn die Namen der Input-Felder werden ebenfalls dynamisch aus dem Systemkatalog der DB erzeugt.
        Haargenau

        EDIT:
        Naja, vollkommen automatisch ist wirklich übertrieben.
        Die Spaltendefinitionen mache ich meist 'per Hand', da die auszugebenen Felder bei meinen Anwendungen meist nicht diejenigen sind, in denen gesucht wird.
        Zuletzt geändert von Quetschi; 28.06.2005, 10:53.
        Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
        Schön - etwas Geschichte kann ja nicht schaden.
        Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

        Kommentar


        • #5
          Die ganze Abfrage sollte aber mit nur einem Imputfeld realisiert werden. Man muss den Suchausdruck also parsen. Und das ist die Kunst.

          CU
          rivella

          Kommentar


          • #6
            Naja, mal als Ansatz:

            1. Suchstring anhand von Leerzeichen zerlegen
            2. Jedes Teil dann überprüfen ob es sich um einen Suchbegriff oder um einen Operator oder ähnliches handelt und entsprechend reagieren.
            3. Wie die Query dann letztendlich zusammengebaut ist hängt dann stark von der abzufragenden Tabelle ab. Du schreibst, dass du letztlich verschiedene Datentypen mit dem gleichen Suchstring abfragen willst, dass wird natürlich problematisch wenn der Suchstring alphanumerisch ist, du mit diesem String aber ein INT-Feld abfragen willst. Sowas musst natürlich prüfen und entsprechend verhindern.
            Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
            Schön - etwas Geschichte kann ja nicht schaden.
            Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

            Kommentar


            • #7
              wie sieht denn so ein suchstring aus ?
              mfg,
              [color=#0080c0]Coragon[/color]

              Kommentar

              Lädt...
              X