Ankündigung

Einklappen
Keine Ankündigung bisher.

Hilfe f. SQL Statement

Einklappen

Neue Werbung 2019

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

  • Hilfe f. SQL Statement

    Hallo Leute,
    wer kann mir anfänger bei einem SQL statement für meine mySQL datenbank helfen ?? untenstehende tabelle vorausgesetzt.


    ID HB ZONE I ZONE II ZONE III
    1 10.000,00 16,98 18,60 20,60
    2 20.000,00 13,88 15,86 17,94
    3 30.000,00 12,41 14,47 16,54
    4 40.000,00 11,50 13,58 15,61
    5 50.000,00 10,86 12,92 14,93
    6 60.000,00 10,37 12,42 14,40
    7 70.000,00 9,99 12,01 13,96
    8 80.000,00 9,67 11,67 13,59
    9 90.000,00 9,40 11,37 13,28
    10 100.000,00 9,18 11,12 13,00
    11 200.000,00 7,89 9,62 11,32
    12 300.000,00 7,27 8,86 10,40
    13 400.000,00 6,89 8,36 9,85
    14 500.000,00 6,63 8,00 9,42
    15 600.000,00 6,42 7,72 9,08
    16 700.000,00 6,26 7,50 8,81
    17 800.000,00 6,13 7,31 8,58
    18 900.000,00 6,02 7,15 8,38
    19 1.000.000,00 5,92 7,01 8,20
    20 2.000.000,00 5,39 6,19 7,14
    21 3.000.000,00 5,13 5,77 6,58
    22 4.000.000,00 4,97 5,50 6,22
    23 5.000.000,00 4,86 5,30 5,94
    24 6.000.000,00 4,78 5,15 5,73
    25 7.000.000,00 4,71 5,02 5,56
    26 8.000.000,00 4,65 4,92 5,41
    27 9.000.000,00 4,61 4,83 5,29
    28 10.000.000,00 4,57 4,75 5,18
    29 20.000.000,00 4,34 4,30 4,51
    30 30.000.000,00 4,24 4,07 4,15

    Anforderung:

    Ich möchte in einem Formular "HB" eingeben zb. 95.125 und über 3 radio buttons "Zone I od. II od. III" auswählen, die daten an das PHP programm übergeben und in das SQL statement einfließen lassen.

    als Ergebnis sollten richtigerweise die datensätze "ID 9" u. "ID 10" retourgegeben werden mit dem dazugehörigen wert der jeweils ausgewälten "Zone".. das ergebnis des zu 95.125 gehörenden wertes der jeweiligen Zone könnte ich dann interpolieren.

    das Formular und die übergabe ins PHP - Programm ist mir klar, mir gehts rein ums das basteln des SQL statement's

    Mein ansatz:
    $sqlab = "SELECT HB , $Zone FROM tabelle WHERE (ID = (SELECT MIN(ID) FROM tabelle WHERE HB >= $HB)) OR (NR = (SELECT MAX(ID) FROM tabelle WHERE ID < (SELECT MIN(ID) FROM tabelle WHERE HB>=$HB))) ORDER BY HB ASC "

    für unterstützung wäre ich sehr dankbar
    LG
    wwweee


  • #2
    Hab mir gerade FBM MyDB installiert von
    http://www.digital-guru.de ...ist ein nettes tool..

    damit habe ich jetzt die Abfrage getestet für meine mySQL version
    4.0.24....
    also
    SELECT MIN(HB) FROM tabellen_name WHERE HB > 85000
    Ergebnis = 90000

    SELECT MAX(HB) FROM tabellen_name WHERE HB < 85000
    Ergebnis = 80000

    das wäre soweit in ordnung, jedoch bei:

    SELECT HB, Zone I FROM tabellen_name WHERE HB = (SELECT MAX(HB) FROM
    tabellen_name WHERE HB < 85000) OR HB = (SELECT MIN(HB) FROM
    tabellen_name WHERE HB > 85000)

    bekomm ich immer einen Syntaxfehler.

    wenn ich nur den ersten teil Abfrage:

    SELECT HB, Z1 FROM planung WHERE HB = (SELECT MAX(HB) FROM planung
    WHERE HB < 85000)

    bekomm ich ebenfalls einen Syntaxfehler.

    *grübel...

    vielleicht weiss jemand rat bezüglich Syntax, müssen die Klammern weg
    und stattdessen unter 'xx ' stellen ??

    dank im vorraus
    wwweee

    Kommentar


    • #3
      Vermutung:
      Sub_Selects, wie diese hier:

      ... SELECT HB, Z1 FROM planung WHERE HB = (SELECT MAX(HB) FROM planung WHERE HB < 85000)

      sind erst ab MYSQL-Version >= 4.1 machbar.

      Siehe hier:
      ---> http://dev.mysql.com/doc/refman/4.1/en/subqueries.html

      ~dilemma~

      Kommentar


      • #4
        Hallo dilemma,

        danke für Deine prompte Antwort

        tja,...die Sub_Selects....

        gibts noch ne andere möglichkeit das statement umzuformolieren? oder muss ich die Version 4.1.x installieren, wie ich immer sag: never change a running system...

        LG
        wwweee

        Kommentar


        • #5
          Ich hab mal etwas kurz ausprobiert, funktioniert aber nur gerade in diesem Fall, wo du nur Zahlen mit einer Ziffer und sonst lauter Nullen hast.
          PHP-Code:
          <?php
          ...
          $hb 91000;      // Beispiel

          $len strlen($hb);
          $div pow(10$len 1);
          $min floor($hb $div) * $div;
          $max ceil($hb $div) * $div;

          $sql "SELECT $zone, hb
                     FROM planung 
                     WHERE hb BETWEEN 
          $min AND $max";
          $res mysql_query($sql) or die(mysql_error() . "
          $sql");
          while(
          $obj mysql_fetch_object($res)){
              
          var_dump($obj);
          }
          ?>
          Wahrscheinlich gäbe es eine Möglichkeit mit Self-Joins und UNION, aber das herauszufinden fehlt mir im Moment die Zeit.
          Gruss
          L

          Kommentar


          • #6
            Hallo lazydog,

            dankeschön vorab,...genial

            als ergebnis habe ich 2 objekte erhalten..

            object(stdClass)#1 (2) { ["Z1"]=> string(4) "9,40" ["HB"]=> string(5) "90000" } object(stdClass)#2 (2) { ["Z1"]=> string(4) "9,18" ["HB"]=> string(6) "100000" }

            das ist genau das richtige, bloss wie komm ich anfänger jetzt an meine werte *g

            Kommentar


            • #7
              Etwa so:
              PHP-Code:
              <?php
              ...while($obj mysql_fetch_object($res)){
                  
              $akt_zone $obj->$zone;
                  
              $hb $obj->HB;
                  echo 
              "$akt_zone || $hb
              "
              ;

              ...
              ?>
              Gruss
              L

              Kommentar


              • #8
                boah Genial da kennt man die Profis raus !

                ich danke Dir lazydog !!!,
                das funktioniert prima, für mySQL 4.0.x

                hab mir grad xampp mit mySQL 4.1.x runtergeladen, werds auf meinem Laptop installieren,..dann teste ich mal die "sub_selects"

                nochmals herzlichen dank
                und Grüße aus Austria :wink:

                Kommentar

                Lädt...
                X