Monat/Jahr verarbeiten

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

  • Monat/Jahr verarbeiten

    hallo,

    mir liegen Monat/Jahr in der Form "04/88" vor.
    um den string in DB sortierbar zu machen, habe ich folgende lösung.
    geht es vielleicht einfacher?

    PHP-Code:
    // aus input-feld dieser string: $bj="04/88"
    // umwandeln in datum "YYYY-mm-dd"

    $part explode("/",$bj);
    if (
    $part[1] >= 20) {$jahr_lead 19;} else {$jahr_lead 20;}
    $datum $jahr_lead.$part[1]."-".$part[0]."-"."01";
    // schreiben in DB

    //lesen aus DB
    while ($row mysql_fetch_row($res))
        {
          
    $part explode("-",$row[0]);          // "1988-04-01" umwandeln in "04/88"
        
    $bj $part[1]."/".substr($part[0],2,2);   // bj: "04/88"
        // code
        

    gruss, wolfgang

  • #2
    ja. du speichers das datum in ne varchar als "04/88" ab, und beim select:

    SELECT *,substring(datum,1,2)as mon,substring(datum,4,2) as jahr FROM tabellenname order by jahr,mon

    wenn du das irgendwie nicht weiter anders das datum gebrauchst...

    ups, das jahr >2000 hab ich ja gar nicht bedacht.. mom
    meine Projekte bestaunen: http://www.kleiza.de

    Kommentar


    • #3
      SELECT * FROM tabellenname order by if(substring(datum,4,2)<20,1,2),substring(datum,4,2) DESC, substring(datum,1,2) DESC

      alles was unter 20 ist, wird als <2020 gewertet..
      meine Projekte bestaunen: http://www.kleiza.de

      Kommentar


      • #4
        @ campus,

        ich habe deinen vorschlag mal getestet, erhalte aber weder eine anzeige noch eine fehlermeldung mit dieser angepassten lösung:

        $res = mysql_query("SELECT test_date FROM ku_test ORDER BY if(substring(test_date,3,2)<20,1,2),substring(test_date,3,2) DESC, substring(test_date,0,2) DESC");
        while ($row = mysql_fetch_row($res))
        {
        echo "$test_date<br>";
        }

        btw:
        ich habe aus "substring(test_date,4,2" "substring(test_date,3,2" und aus "(datum,1,2)" "(datum,0,2)" gemacht (zählung beginnt bei "0", oder?).

        gruss, wolfgang

        Kommentar


        • #5
          echo "$test_date<br>"; muss natürlich heissen: echo "$row[0]<br>";

          das kommt vom ständigen kopieren.

          es läuft einwandfrei!

          vieln dank campus, gruss, wolfgang

          Kommentar


          • #6
            zu früh gefreut.
            ich erhalte diese reihenfolge:

            09/99
            05/96
            09/98
            10/98
            01/96
            08/96
            08/98
            03/96
            04/96
            05/95
            03/75
            11/67
            10/02
            06/01


            ist offensichtlich falsch.
            zudem müssten die jahre 01 und 02 oben erscheinen.

            Kommentar


            • #7
              ich habe aus "substring(test_date,4,2" "substring(test_date,3,2" und aus "(datum,1,2)" "(datum,0,2)" gemacht (zählung beginnt bei "0", oder?).
              nein
              meine Projekte bestaunen: http://www.kleiza.de

              Kommentar


              • #8
                ok,
                wie konnte ich zweifeln, ist ja mysql und nicht php.
                die ausgabe ist jetzt auch korrekt.

                ich hab's mir im handbuch angesehen, verstehe allerdings die if-abfrage nicht ganz.

                im fall jahr<20 gibt sie die "1" zurück, sonst die "2", richtig?
                nur wie verwertet die abfrage die "1" oder "2"?

                ich würde mich über eine etwas ausfürlichere erklärung sehr freuen.

                danke, gruss wolfgang

                Kommentar


                • #9
                  ja, das stimmt, bei wahre aussage gibt er 1 und ansonsten 2 zurück, und danach wird ertmal sortiert, also alle die <20 sind haben eine ein und stehen somit vor den 2 en.... mehr ist das nicht..
                  meine Projekte bestaunen: http://www.kleiza.de

                  Kommentar


                  • #10
                    @ campus,
                    danke für die info. so ähnlich hatte ich mir das gedacht.
                    kleiner code. grosse wirkung - klasse!
                    gruss, wolfgang

                    Kommentar

                    Lädt...
                    X