Abfrage mit einem Haufen Parameter - wie?

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

  • Abfrage mit einem Haufen Parameter - wie?

    Hallo,

    ich möchte eine mySQL-Abfrage verwenden, die viele Abhängigkeiten besitzt, also z.B.:
    • Normale Abfrage, ohne das der Besucher im Formular zusätzliche Suchkriterien definiert
    • Normale Abfrage plus Angabe einer Farbe
    • Normale Abfrage plus Angabe einer Farbe und einer Größe
    • Normale Abfrage plus Größe und Material


    Wie man Abfragen generell (select ...) erstellt ist mir klar, ich frage mich nur, ob es nicht einen Trick gibt, diese endlose SQL-Abfrage einfacher zu generieren, wie z.B.

    wenn farbe angegeben
    $komplett = $normale_anfrage + $farbe;

    wenn farbe und größe angegeben
    $komplett = $normale_anfrage + $farbe + $groesse;

    usw.

    So gedacht, daß man in den Variablen $farbe (z.B.) Teile der "fetten" SQL-Abfrage speichert und diese dann bei der endgültigen Abfrage irgendwie kombiniert:

    $sql_abfrage = mysql_query ($komplette_anfrage);


    Wie macht ihr das?

    Wäre prima, wenn jemand ein Beispiel für Anfänger posten könnte!

  • #2
    Es ist zwar nicht php, sonder visual basic, ich verwende es bei erstellung von abfragen mit nicht festgelegter anzahl an Auswahlmöglichkeiten. Beliebig erweiterbar, incl sortierung.


    falls du weitere fragen hast, bitte mailen
    software@gmx.de

    //Start
    SQL1 = "SELECT T_FIRMA.Firmennummer, T_FIRMA.Kunde, T_FIRMA.Lieferant
    SQL12 = "FROM T_FIRMA"
    //um zu entscheiden ob where oder and
    FirstArg = True
    //checken ob parameter 1 gerwählt wurde
    If Not IsNull(Me![Suche1]) Then
    SQL2 = SQL2 & " WHERE ("

    "//text auf indizes umsetzen

    ' Select Case Me![Typ]
    ' Case "Alle"
    SQL2 = SQL2 & "([Firmennummer] =" & Me![Suche1] & ")"
    ' Case "Kunden"
    ' SQL2 = SQL2 & "([Firmennummer] =" & Me![Suche1] & ")"
    ' Case "Lieferanten"
    ' SQL2 = SQL2 & "([Firmennummer] =" & Me![Suche1] & ")"
    ' Case "Interessenten"
    ' SQL2 = SQL2 & "([Firmennummer] =" & Me![Suche1] & ")"
    ' Case "Wettbewerber"
    ' SQL2 = SQL2 & "([Firmennummer] =" & Me![Suche1] & ")"
    ' End Select
    FirstArg = False //jetzt haben wir where, kommt and
    End If
    //checken ob parameter 2 gerwählt wurde
    If Not IsNull(Me![Suche2]) Then
    If FirstArg Then
    SQL2 = SQL2 & " WHERE ("
    Else
    SQL2 = SQL2 & " AND "
    End If
    SQL2 = SQL2 & "(([Firmenname1] & "" "" & [Firmenname2]) Like ""*" & Me![Suche2] & "*"")"
    FirstArg = False
    End If
    ....weitere parameter checken
    ........
    // jetzt kommt die sortierung
    Select Case Me![Sort]
    Case "Nummer"
    ' Select Case Me![Typ]
    ' Case "Alle"
    ' SQL3 = " ORDER BY [T_FIRMA].[Firmennummer];"
    ' Case "Kunden"
    ' SQL3 = " ORDER BY [Kundennummer];"
    ' Case "Lieferanten"
    ' SQL3 = " ORDER BY [Lieferantennummer];"
    ' Case "Interessenten"
    SQL3 = " ORDER BY [Firmennummer];"
    ' Case "Wettbewerber"
    ' SQL3 = " ORDER BY [T_FIRMA].[Firmennummer];"
    ' End Select
    ' SQL3 = " ORDER BY [Lieferantenkategorie], [Firmenname1] & "" "" &
    //sql code zusammensetzen
    ' SQL = SQL1 & SQL11 & SQL12 & SQL2 & SQL3

    Kommentar


    • #3
      Code:
      $query = array ($normale_anfrage)
      if ($farbe) $query[] = "farbe='$farbe'";
      if ($groesse) $query[] = "groesse='$groesse'";
      ...
      $sql_abfrage = mysql_query (implode (' and ',$query));
      Man beachte die Leerzeichen im '_and_'!

      Diese Methode ist auch ganz sinnig, wenn mit neuen Bedingungen auch neue Tabellen in die Query kommen:
      Code:
      $what = array ('TABELLE1.FELD1,TABELLE1.FELD2');
      $where = array ('AKTIV=1');
      $from = array ('TABELLE1');
      if ($farbe)
      {
        $where[] = "FARBE.NAME='$farbe' and FARBE.ID=TABELLE1.FARB_ID";
        $from[] = 'FARBE';
      }
      ...
      $sql_abfrage =
        'select '.implode(',',$what)
        .' from '.implode(',',$from)
        .' where '.implode(' and ', $where)
        .' order by TABELLE1.ID'
      ;
      mein Sport: mein Frühstück: meine Arbeit:

      Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

      Kommentar

      Lädt...
      X