Auswahlliste

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

  • Auswahlliste

    Hallo,

    habe folgende Frage. Mache eine Berechnung und erhalte als Ergebnis $d.
    Anhand der Grösse von $d gibt es in der Auswahlliste eine Ausgabe die sich $months nennt.

    Hier mein Code:

    Code:
    .....
    $months = "";
    
           if ($d <= -7) {
                  $months = "more than 7 months before launch";
          } else if ($d <= -4 && $d >= -6){
                  $months = "6 to 4 months before launch";
          } else if ($d <= -1 && $d >= -3){
                  $months = "3 to 1 months before launch";
          } else if ($d >= 0 && $d <= 3) {
                  $months = "0 to 3 months";
          } else if ($d >= 4 && $d <= 6) {
                  $months = "4 to 6 months";
          } elseif ($d >= 7 && $d <= 9) {
                  $months = "7 to 9 months";
          } elseif ($d >= 10 && $d <= 12) {
                 $months = "10 to 12 months";
          } elseif ($d >= 13 && $d <= 24) {
                  $months = "1 up to 2 years";
          } elseif ($d >= 25 && $d <= 36) {
                 $months = "more than 2 years up to 3 years";
          } elseif ($d >= 36 && $d <= 60) {
                  $months = "more than 3 years up to 5 years";
          } elseif ($d >= 61) {
                 $months = "more than 5 years";
          }
    ....
    Jetzt steht in meiner Auswahlliste nach dem die Berechnung gemacht
    wurde, folgende Dinge drinne:

    10 to 12 months
    1 to 3 months
    0 to 3 months
    more than 5 years

    Jetzt möchte ich aber das die Sachen geordnet ausgegeben werden,
    also der grösse nach:

    0 to 3 months
    1 to 3 months
    10 to 12 months
    more than 5 years

    Wie kann ich das machen, hier meine Auswahlliste:

    <option value='$months'>$months</option>

  • #2
    verändere die reihenfolge deiner elseif-blöcke.

    Kommentar


    • #3
      Hä, das geht ja wohl nicht.
      Wenn ich als Ergebnis $d bekomme und mir $months
      ausgeben lasse, was von $d abhängt, kann ich
      doch nicht die IF-Blöcke verändern !

      Muß doch ne andere Lösung geben !

      Kommentar


      • #4
        verstehe nicht, warum?

        statt
        PHP-Code:
        if ($d <= -7) {
                      
        $months "more than 7 months before launch";
              } else if (
        $d <= -&& $d >= -6){
                      
        $months "6 to 4 months before launch";
              } else if (
        $d <= -&& $d >= -3){
                      
        $months "3 to 1 months before launch"
        einfach
        PHP-Code:
        if ($d <= -7) {
                      
        $months "more than 7 months before launch";
              } elseif (
        $d <= -&& $d >= -3){
                      
        $months "3 to 1 months before launch";
              } elseif (
        $d <= -&& $d >= -6){
                      
        $months "6 to 4 months before launch"
        etc

        Kommentar


        • #5
          Das ergibt ja totalen Quatsch !

          Kommentar


          • #6
            Original geschrieben von steiner82
            Das ergibt ja totalen Quatsch !
            OffTopic:
            Das dürfte doch die Ergebnisqualität sein, die man von dir gewohnt ist.



            (Möchtest du es vielleicht noch mal mit einer Problembeschreibung versuchen, die diese Bezeichnung auch verdient?)
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              Also die Daten werden aus einer Datenbank ausgegeben. Ich habe einen Startwert
              und einen Endwert, die Differenz davon ist $d.

              Die If-Anweisung ist einer while Schleife und wird dann in die Auswahlliste eingetragen.
              Also wird die IF-Anweisung mehrmal durchlaufen, solang halt bis alle DS ausgegeben werden auf die meine Select-Ausgabe zutrifft, so dann wird
              zu jedem Datensatz(DS) eine Berechnung durchgeführt, Ergebniss ist $d.

              Daher kommt es halt zu diesem durcheinander und das soll geordnet werden.

              nicht die kleinen Zahl zum Schluß und der Rest am Anfang, sondern
              die Ausgabe soll so erfolgen, wie die If-Anweisung, sondern
              von klein nach gross.

              DANKE !

              P.S. Danke für das Kompliment !

              Kommentar


              • #8
                Ich seh zwar weder eine Auswahlliste noch mehrere Werte, aber warum packst du das alles nicht in ein Array, schreibst einen geeigneten Wert vornedran, sortierst das ganze und schmeißt den Wert dann wieder raus?

                Hast du die Werte, die du für die Berechnung brauchst, alle in der Abfrage?
                Ich denke, also bin ich. - Einige sind trotzdem...

                Kommentar


                • #9
                  ich habe nicht verstanden, was dagegen spricht, die abfrage nach intervalen anders anzuordnen.

                  Kommentar


                  • #10
                    Hier mal der ausführlich Code:

                    PHP-Code:
                    ...............
                    echo 
                    "
                    <select size=\"20\" name=\"months\" class=\"listen\">"
                    ;
                    echo 
                    "<option value='all'>All Periods</option>";
                    if(
                    $country=='all'){
                    $result mysql_query("SELECT p.*, b.* 
                    FROM project_spec as  p LEFT JOIN brand_launch as 
                    b ON p.country = b.country WHERE p.icd_id='
                    $icd_id' and p.brand_id=b.brand_id Order by b.launch_time");
                    }
                    else
                    {
                    $result mysql_query("SELECT p.*, b.* 
                    FROM project_spec as p LEFT JOIN brand_launch as 
                    b ON p.country = b.country WHERE p.country='
                    $country' and p.icd_id='$icd_id' and 
                    p.brand_id=b.brand_id Order by b.launch_time"
                    );
                                          }
                                          
                    $num mysql_num_rows($result);
                                          function 
                    getTimeStampFromDate($date) {
                                          
                    $array explode("/"$date);
                                          return 
                    mktime(000$array[0], 1$array[1]);
                                          }
                                          
                    $array = array();
                                          if (
                    $num != 0) {
                                          while (
                    $row mysql_fetch_array($result)) {
                    $start getTimeStampFromDate($row['launch_time']);
                    $end getTimeStampFromDate($row['create_time']);
                    $d round(($end $start) / 60 60 24 30);

                           
                    $months "";

                           if (
                    $d <= -7) {
                                  
                    $months "more than 7 months before launch";
                          } else if (
                    $d <= -&& $d >= -6){
                                  
                    $months "6 to 4 months before launch";
                          } else if (
                    $d <= -&& $d >= -3){
                                  
                    $months "3 to 1 months before launch";
                          } else if (
                    $d >= && $d <= 3) {
                                  
                    $months "0 to 3 months";
                          } else if (
                    $d >= && $d <= 6) {
                                  
                    $months "4 to 6 months";
                          } elseif (
                    $d >= && $d <= 9) {
                                  
                    $months "7 to 9 months";
                          } elseif (
                    $d >= 10 && $d <= 12) {
                                 
                    $months "10 to 12 months";
                          } elseif (
                    $d >= 13 && $d <= 24) {
                                  
                    $months "1 up to 2 years";
                          } elseif (
                    $d >= 25 && $d <= 36) {
                                 
                    $months "more than 2 years up to 3 years";
                          } elseif (
                    $d >= 36 && $d <= 60) {
                                  
                    $months "more than 3 years up to 5 years";
                          } elseif (
                    $d >= 61) {
                                 
                    $months "more than 5 years";
                          }

                          
                    $array[$months]['create_time'][] = $row["create_time"];
                          
                    print_r($array);

                    }

                    }
                    foreach (
                    $array as $months => $value) {



                            echo
                    "
                    <option value='"
                    .implode (","$value['create_time'])."|$months'>$months
                    </option>"
                    ;
                                        }
                            echo 
                    "</select></td>
                    .................... 
                    Ich hole mir aus der DB den Wert "create time" und "launch time" - Die Differenz von diesen Werten ist $d.

                    Wenn ich jetzt die DS durchlaufe und dann die If-Anweisung, dann kann es
                    ja sein, dass im ersten Datensatz "more than 5 years" rauskommt,
                    und im letzten Datensatz "0 to 3 months", dass wird
                    dann so dargestellt:

                    more than 5 years
                    0 to 3 months

                    es muss aber so sein, dass die Ausgaben von klein

                    0 to 3 months

                    nach gross

                    more than 5 years

                    und die Zeiträume die fehlen

                    z.B.

                    4 to 6 months als ------------------------------- angezeigt werden:

                    0 to 3 months
                    -----------------
                    -----------------
                    10 to 12 months

                    usw.

                    Da weis ich nicht weiter !

                    Kommentar


                    • #11
                      Hab vergessen die Zeile umzubrechen, entschuldigt.

                      Kommentar


                      • #12
                        Original geschrieben von steiner82
                        Ich hole mir aus der DB den Wert "create time" und "launch time" - Die Differenz von diesen Werten ist $d.
                        Dann sortiere doch bereits in der Abfrage...

                        ORDER BY spalte1 - spalte2
                        Ich denke, also bin ich. - Einige sind trotzdem...

                        Kommentar


                        • #13
                          totaler unfug ist natürlich die verwendung des strings $months als array-schlüssel in $array.

                          ansonsten s. mrhappiness, er hat dir bereits 2 wertvolle ansätze vorgeschlagen.

                          Kommentar


                          • #14
                            Order by spalte 1 - spalte 2 geht nicht, habe ich schon probiert.

                            Warum ist das mit dem $array als $months Unfug ?

                            Habe trotzdem keine genaue Idee, wie ich das umsetzen kann.

                            Könnt ihr mit bitte noch einen Ansatz geben ?

                            Kommentar


                            • #15
                              lass dir $array zum schluss ausgeben - das muss ja übel aussehen...

                              $months muss eine zahl sein, z.b. 0 für den ersten interval, 10 für den letzten, dazwischen entsprechend nummeriert.

                              danach kannst du mit einer for-schleife (oder foreach + zähler) die datensätze in der richtigen reihenfolge ausgeben (weil eben durchgehend von 0 bis 10) und anhand des ersten schlüssel die entsprechenden strings zusammenbasteln (dazu kann man sich ein array basteln, z.b. array(0=>'foo', 1=>'bar'), etc.).

                              klingt sogar für mich recht verwirrend, aber so könnte es ausschauen:

                              Code:
                              $array[0][1] => 0 steht für "more than 7 months before launch", 1 für den datensatz #1
                              $array[0][2] => 0 steht für "more than 7 months before launch", 2 für den datensatz #2
                              $array[1][1] => 1 steht für "6 to 4 months before launch", 1 für den datensatz #1
                              $array[2][1] => 2 steht für "3 to 1 months before launch", 1 für den datensatz #1
                              etc.

                              Kommentar

                              Lädt...
                              X