Filtern von mehreren Spalten

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

  • Filtern von mehreren Spalten

    Hi Leute,

    habe ein Problem: Ich habe eine Tabelle in der der Benutzer aus jeweils einer Spalte einer Dropdownliste einen Wert (entweder false bei 'keiner Auswahl' oder ein Wert aus der jeweiligen Spalte) zuweisen kann und diese Tabelle dann nach den gewünschten Werten aus den DDl filtern kann. Soweit so gut
    Bei 2 DDL ist das noch nicht so aufwendig, also 2^2 verschiedene if Abfragen um zu wissen bei welcher DDL ein Wert ausgewählt wurde( da eine einzelne SQL Abfragen nicht funktioniert, wenn eine DDL nicht ausgewählt wurde)
    Nun zu meinem eigentlichen Problem: Nun möchte ich nun nach den 5 Variablen filtern...was bedeuten würde, dass ich 32 if Abfragen schreiben müsste. Eine sehr unschöne Lösung wie ich finde, zumal man nur schwer eine Variable ernfernen/hinzufügen kann.
    Hat jemand vielleicht eine bessere Idee anstatt der 32 if Abfragen. Kann man die SQL Abfragen nicht anders nach der Auswahl modifizieren. Mit einer Schleife oder ähnliches?

    Schonmal vielen Dank für eure Hilfe

    PHP-Code:

    $name
    =$_POST["name"]; 
    $problemkategorie$_POST["problemkategorie"]; 
    $betreff$_POST["betreff"]; 
    $stufe$_POST["stufe"]; 
    $stand $_POST["stand"]; 
    $datum$_POST["datum"]; 
    $id $_POST["id"];

    //Auswahl für Filter name und problemkategorie, reihenfolge der ifs
    // entscheidend: 1. beide gesetzt und dann jeweils nur einer

    if ($name !="false" && $problemkategorie !="false" ) {

    $abfrage="SELECT name AS Benutzername, problemkategorie AS Problemkategorie, betreff AS Problem, beschreibung AS 

    Problembeschreibung, kommentar AS Kommentar,stufe AS Stufe, 

    stand AS Status, datum AS Datum, id FROM anfrage WHERE name='
    $name' AND problemkategorie='$problemkategorie

    AND  stand='offen'
    ORDER BY '
    $sortiert' ASC";
    $abfrage2="SELECT name, problemkategorie, betreff, 

    beschreibung,kommentar, stufe , stand, datum, id FROM anfrage 

    WHERE problemkategorie='
    $problemkategorie' AND name='$name' AND stand='offen'
    ORDER BY '
    $sortiert' ASC";

         break;

    }



    if (
    $problemkategorie=="false") {

    $abfrage="SELECT name AS Benutzername, problemkategorie AS Problemkategorie, betreff AS Problem, beschreibung AS 
    Problembeschreibung, kommentar AS Kommentar,stufe AS Stufe, 

    stand AS Status, datum AS Datum, id FROM anfrage WHERE name='
    $name' AND  stand='offen'
    ORDER BY '
    $sortiert' ASC";
    $abfrage2="SELECT name, problemkategorie, betreff, 

    beschreibung,kommentar, stufe , stand, datum, id FROM anfrage WHERE name='
    $name' AND stand='offen'
    ORDER BY '
    $sortiert' ASC";


         break;

    }

    if (
    $name=="false") {

    $abfrage="SELECT name AS Benutzername, problemkategorie AS Problemkategorie, betreff AS Problem, beschreibung AS 
    Problembeschreibung, kommentar AS Kommentar,stufe AS Stufe, 

    stand AS Status, datum AS Datum, id FROM anfrage WHERE problemkategorie='
    $problemkategorie' AND  stand='offen'
    ORDER BY '
    $sortiert' ASC";
    $abfrage2="SELECT name, problemkategorie, betreff, 

    beschreibung,kommentar, stufe , stand, datum, id FROM anfrage WHERE problemkategorie='
    $problemkategorie' AND stand='offen'
    ORDER BY '
    $sortiert' ASC";

         break;


    Zuletzt geändert von JCDenton; 12.04.2007, 22:05.

  • #2
    Was ist DDI und DDL? Evtl beschreibst du dein Problem noch etwas genauer und sagst uns aus welchen Werten welche Abfragen enstehen sollen. Ich denke eine Lösung des Problems geht in Richtung Arrays / Schleifen.
    Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

    Kommentar


    • #3
      DDI ist ein Schreibfehler. sollte auch DDL heißen was für DrodDownListe steht. Die Werte in den DDL sind unterschiedlich, da die aus den jeweiligen Spalten stammen.

      Und sieht so aus:
      PHP-Code:
      // SQL Auswahl für die DDL der verschiednen Sections

      switch($_GET['section']) {

      case 
      "benutzer":
      $sqldrop "SELECT DISTINCT $zwischen FROM benutzer ORDER BY '$zwischen' ASC";
      break;

       case 
      "probleme":
      $sqldrop "SELECT DISTINCT $zwischen FROM anfrage ORDER BY '$zwischen' ASC";
      break;

       case 
      "offen":
      $sqldrop "SELECT DISTINCT $zwischen, stand FROM anfrage WHERE stand='offen' ORDER BY '$zwischen' ASC";
      break;

       case 
      "bearbeitung":
      $sqldrop "SELECT DISTINCT $zwischen, stand FROM  anfrage WHERE stand='in Bearbeitung' ORDER BY '$zwischen' ASC";
      break;

       case 
      "abgeschlossen":
      $sqldrop "SELECT DISTINCT $zwischen, stand  FROM anfrage WHERE stand='abgeschlossen' ORDER BY '$zwischen' ASC";
      break;


      }




      $ergebnis mysql_query($sqldrop);

      while (
      $rowmysql_fetch_array($ergebnis))

      {
      if (
      $zwischen=="beschreibung"$zwischen="";
      if (
      $zwischen=="kommentar"$zwischen="";



      echo 
      "<OPTION VALUE=\"".$row[$zwischen]."\">".$row[$zwischen];}



      echo 
      ' </select> </td> '
      }

      echo 
      "  </tr>\n";

      //Ende der Dropdownlisten

      echo ' <input type="submit" value="Filtern">';
      echo 
      ' </form> ';

      //Ende Filter Button

      //Filter aus Button

       
      switch($_GET['section']) {

              case 
      "probleme":
      echo 
      ' <form action=index.php?section=probleme&filter=aus method="post"> ';
      break;


          case 
      "benutzer":
      echo 
      ' <form action=index.php?section=benutzer&filter=aus method="post"> ';

      break;

              case 
      "offen":
      echo 
      ' <form action=index.php?section=offen&filter=aus method="post"> ';

      break;

              case 
      "bearbeitung":
      echo 
      ' <form action=index.php?section=bearbeitung&filter=aus method="post"> ';

      break;


              case 
      "abgeschlossen":
      echo 
      ' <form action=index.php?section=abgeschlossen&filter=aus method="post"> ';
      break;


      }

      echo 
      ' <input type="submit" value="Filtern aus">';
      echo 
      ' </form> '

      Kommentar


      • #4
        PHP-Code:
         switch($_GET['section']) {
                case 
        "probleme":
        echo 
        ' <form action=index.php?section=probleme&filter=aus method="post"> ';
        break;
            case 
        "benutzer":
        echo 
        ' <form action=index.php?section=benutzer&filter=aus method="post"> ';
        break;
        .....

        lässt sich stark vereinfachen ...
        PHP-Code:
         switch($_GET['section']) {
        ...
        case 
        "probleme":
        case 
        "benutzer":
        echo 
        ' <form action=index.php?section=' $_GET 'section' ] . '&filter=aus method="post"> ';
        break;
        .....

        dein Problem hast du allerdings immer noch nicht erklärt
        Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

        Kommentar


        • #5
          danke für den Hinweis! Wäre aber super wenn noch jemand eine Idee hätte wie ich das Problem lösen könnte. Eventuelle mit Schleifen und die SQl Anweisungen mit so einer String prozedur zu zerschneiden?

          Kommentar


          • #6
            PHP-Code:

            $where 
            = array("stand = 'offen'");

            if (
            $name != 'false'$where[] = "name = '" $name "'";
            if (
            $problemkategorie != 'false'$where[] = "problemkategorie = '" $problemkategorie "'";

            [...]


            $abfrage="SELECT name AS Benutzername, problemkategorie AS Problemkategorie, betreff AS Problem, [usw]

            WHERE " 
            implode(" AND "$where) . "

            ORDER BY '
            $sortiert' ASC"
            ich glaube

            Kommentar


            • #7
              Eventuelle mit Schleifen und die SQl Anweisungen mit so einer String prozedur zu zerschneiden?
              Darauf hatte ich schon hingewiesen ... eine genaue Problembeschreibung fehlt immer noch
              Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

              Kommentar

              Lädt...
              X