SELECT * FROM msw_$jahr WHERE AND AND AND...etc :) Prob!

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

  • SELECT * FROM msw_$jahr WHERE AND AND AND...etc :) Prob!

    i hope ihr könnt bei meinem problem helfen..

    So...ich habe eine sehr umfangreiche Datenbankabfrage geplant, wo man nach allen möglichen kriterien(bereichen) sich daten anzeigen lassen kann!

    da habe ich ein option select feld...bzw. 4
    das erste für Tmin
    zweite für Tmax
    dritte für rr
    vierte für snow

    nun will ich ja nicht tausend zeilen schreiben und dachte mir das ich das mit "Where" und dann den "AND" verknüpfungen auslesen kann...


    if($Tmin != ""){$Tminn = "Tmin < $Tmin";}else{$Tminn = "Tmin";}
    if($Tmax != ""){$Tmaxx = "Tmax < $Tmax";}else{$Tmaxx = "Tmax";}
    if($rr != ""){$rrr = "rr < $rr";}else{$rrr = "rr";}
    if($snow != ""){$snoww = "snow < $snow";}else{$snoww = "snow";}

    $abfrage = "SELECT * FROM msw_$jahr WHERE $Tminn AND $Tmaxx AND $rrr AND $snoww $sort";


    geht soweit wunderbar..wenn ich in allen 4 option select feldern was ausgewählt habe...wenn ich aber dort nichts ausgewählt habe gibt es nur schei*e...keine fehlermeldung..aber falsche datenbereiche...


    beispiel:
    ich habe für tmin = -5, für tmax = 5, und die restlichen leer...

    dann lautet der code volsltändig ja...

    SELECT * FROM msw_2002WHERE Tmin < -5.0 AND Tmax < 5.0 AND rr AND snow ORDER BY bla bla bla...

    blöder weise zeigt er mir jetzt nur werte an die erstens Tmin unter -5 haben, Tmax unter 5 haben UND wo in rr etwas vorhanden ist und in snow etwas vorhanden ist...
    problem: es gibt auch tage mit tmin unter -5, tmax unter 5 und ohne rr und ohne snow...:/

    mir fällt aber nicht ein wie ich das anders schreiben könnte.
    ich muß ja die AND's machen...kann die ja nicht bei $Tminn etc einsetzen da ich ja nicht weiß welches das erste sein wird, dort müßte dann ja "Where" stehen...

    ich hatte auch schon versucht statt wenn nix ausgewählt wird bei z.b. snow, statt "snow"..nichts ausgeben zu lassen...aber dann meckert er wegen den vielen "And's"...

    vollständiger code:
    <?
    if($Tmin != ""){$Tminn = "Tmin < $Tmin";}else{$Tminn = "Tmin";}
    if($Tmax != ""){$Tmaxx = "Tmax < $Tmax";}else{$Tmaxx = "Tmax";}
    if($rr != ""){$rrr = "rr < $rr";}else{$rrr = "rr";}
    if($snow != ""){$snoww = "snow < $snow";}else{$snoww = "snow";}

    $abfrage = "SELECT * FROM msw_$jahr WHERE $Tminn AND $Tmaxx AND $rrr AND $snoww $sort";
    $ergebnis = mysql_query($abfrage);
    $row = mysql_num_rows($ergebnis);

    while($row = mysql_fetch_object($ergebnis))
    {
    $mittel = ($row->Tmax + $row->Tmin) / 2;
    echo "<tr align=\"center\"><td>";
    echo "$row->tag.$row->monat.$jahr";
    echo "</td><td>";
    echo(sprintf ("%01.1f°C", $row->Tmin));
    echo"</td><td>";
    echo(sprintf ("%01.1f°C", $row->Tmax));
    echo"</td><td>";echo(sprintf ("%01.1f°C", $mittel));echo"</td><td>";
    if($row->rr != "0.0"){echo(sprintf ("%01.1f l/m²", $row->rr));}
    echo"</td><td>";
    if($row->snow != "0.0"){echo(sprintf ("%01.1f cm", $row->snow));}
    echo"</td></tr>";
    }
    echo "</table>";

    ?>


    ich hoffe ihr könnt mir helfen. oder geht das gar nicht?
    muß ich mir die arbeit machen und die mehreren möglichkeiten ausschreiben. ich hoffe nicht, da es noch 6 andere kriterien gibt..:/

    vielen dank im vorraus
    te

  • #2
    Ich hoffe, dass ich Dein Problem jetzt richtig verstanden habe, ich würde es so machen:

    $abfrage = "SELECT * FROM msw_$jahr WHERE ";

    if ( $Tmin != "" ) {
    $abfrage .= "Tmin < $Tmin";
    if ( $Tmax != "" || $rr != "" || $snow != "" ) { $abfrage .= " AND "; }
    }

    if ( $Tmax != "" ) {
    $abfrage .= "Tmax < $Tmax";
    if ( $rr != "" || $snow != "" ) { $abfrage .= " AND "; }

    if ( $rr != "" ) {
    $abfrage .= "rr < $rr";
    if ( $snow != "" ) { $abfrage .= " AND "; }
    }

    if ( $snow != "" ) {
    $abfrage .= "snow < $snow";
    }

    $abfrage .= " $sort";


    Sollten es mal mehr Variablen werden, wird es natürlich etwas unübersichtlicher.


    Carsten

    Kommentar


    • #3
      error

      habs damit versucht aber irgendwas stimmt da nicht

      der gibt mir jetzt nen fehler an der schliessenden "?>" des gesamten codes.

      bis jetzt bin i noch net darauf gekommen wieso?!?!


      aber trotzdem danke.
      dachte eigentlich das geht auch einfacher...

      gruß

      Kommentar


      • #4
        alles o.k.

        fehler gefunden.

        es fehlte ne klammer...also diese teile da...wie nennt man die eigentlich?!?!

        danke

        Kommentar


        • #5
          Wie nennt man was?
          Klammern nennt man Klammern.*gg*
          ich bin Toxical, und werd es auch bleiben

          Kommentar


          • #6
            *lol*

            ja...na aber die nennt man ja anders....als die normalen () klammern....

            } geschweifte?

            na wurscht...

            Kommentar


            • #7
              Englisch für Forgelaufene

              (Klammern) parentheses
              [eckige Klammern] brackets
              {geschweifte Klammern} braces
              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