In einer Spalte nach dem DATE suchen, das am nähsten zurück liegt

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • In einer Spalte nach dem DATE suchen, das am nähsten zurück liegt

    Hi Leute, ich hab mal ein Problemchen.

    Ich habe eine Spalte in der sich 100 DATEs befinden.
    Nun will ich irgendwie mit NOW() rauskriegen, welches der Dates als letztes war sozusagen. Das Jahr spielt dabei ja eigentlich keine Rolle.
    Wie könnte man das abfragen? Ich schätze da müssten zwei for-to schleifen eingebaut werden... hab aber keine ahnung wie.

    ich schätze mal das ist ein ganz schön kompliziertes PRoblem, aber ich hoffe trotzdem das ihr mir helfen könnt!

    danke, mfg Lars

  • #2
    [...] ORDER BY datespalte DESC

    CAT Music Files

    Kommentar


    • #3
      Danke aber Sorry, bin noch etwas zu neu in der Materie...
      kannst du es ein bisschen ausführlicher beschreiben? das wär super, danke...

      was gibt mir der befehl aus? was heisst DESC?

      danke

      Kommentar


      • #4
        Ist kein direkter Befehl, wohl eher ein Modifier...

        Wird z.B. so eingebaut:

        SELECT * FROM tabelle ORDER BY datumspalte DESC

        wobei ORDER BY die Spalte(n) angibt, nach der (nach denen) geordnet werden soll. ASC (ascending, aufsteigend, niedrigestes zuerst) ist hierbei die Standardeinstellung, DESC (descending, absteigend, höchstes zuerst) muss explizit angegeben werden.

        Wir lassen hier also das Ergebnis nach dem Datum sortieren, und zwar die, die am kürzesten zurückliegen (also die, die den höchsten Wert haben) zuerst.

        CAT Music Files

        Kommentar


        • #5
          Wow, das ist ja Spitze... und das klappt, auch wenn meine Felder als DATE deklariert sind? Sollte ja auch gehen.

          Wie schaffe ich es nun, genau den auszugeben, der als letztes Geburtstag hatte. Also nur diesen einen Namen?

          Kommentar


          • #6
            nun, da setzen wir jetzt den Modifider LIMIT ein:

            SELECT * FROM tabelle ORDER BY datumspalte DESC LIMIT 1

            CAT Music Files

            Kommentar


            • #7
              geil, das versuche ich gleich mal!!!

              nächste Frage: Kann man erkennen, wenn zwei Tage identisch sind? denn, wenn ich ausgebe, wer als letztes Geburtstag hatte, dann sollte es ja gehen, das auch, wenn zwei Leute am selben Tag geburtstag haben, beide ausgegeben werden,...?

              danke erstmal... ich versuch das oben...

              Kommentar


              • #8
                Hmm... das funktioniert noch nicht so ganz. Er gibt mir zwar etwas aus, aber es ist die jüngste im Bunde... und nicht die von heute aus gesehen als letzte Geburtstag hatte. Gibts da noch nen Trick?

                thanx

                Kommentar


                • #9
                  hmmm

                  also du könntest noch eine WHERE Klausel einbauen alla WHERE datumsspalte >= '22-11-2001 00:00:00' für den Datumstring schau nochmal nach der genaueren Formatierung, bin jetzt gerade nicht sicher ( Hirn meldet das es genau so dunkel ist wie drausen). Dafür muss du dann das limit wieder raus nehmen. Naja und du musst das Datum wissen von heute

                  Kommentar


                  • #10
                    man könnte auch mal sowas probieren:

                    ORDER BY DAYOFYEAR(NOW())-DAYOFYEAR(datespalte) ASC

                    Ich mach mir später noch Gedanken dazu.

                    CAT Music Files

                    Kommentar


                    • #11
                      Ich bin ja blöd, verwirre mich selber mit irgendwelchen arithmetischen Problemen... Dabei bringt mySQL ja extra Funktionen für sowas mit:

                      SELECT * FROM tabelle ORDER BY (TO_DAYS(NOW())-TO_DAYS(datespalte)) ASC

                      Sollte das gewünschte Ergebnis erzielen!

                      Aber Achtung:
                      TO_DAYS() is not intended for use with values that precede the advent of the Gregorian calendar (1582), because it doesn't take into account the days that were lost when the calendar was changed.

                      CAT Music Files

                      Kommentar


                      • #12
                        Hi, find ich klasse das ihr mir alle so helft!
                        Leider hab ich es immer noch nicht hinbekommen.
                        Es wird weiterhin nur die jüngste im BUnde ausgegeben, also die jenige mit dem Geburtsdatum an erster Stelle. Woran kann das denn liegen?

                        danke für eure Hilfe, Lars


                        ICH KORRIGIERE, Zwar die Jüngste, also theoretisch mit dem Geburtsdatm ganz zum Schluss!
                        nich wahr?

                        [Editiert von Larsidotnet am 22-11-2001 um 15:08]

                        Kommentar


                        • #13
                          hmm,

                          was ist denn dein aktueller SQL Query ?

                          Kommentar


                          • #14
                            So schauts aus:::

                            cut-----------------

                            <?
                            $conn_id = mysql_connect("mysql.domainfactory.de","xxxx","xxxx");
                            mysql_select_db("xxxx",$conn_id);

                            $letzter_geburtstag = mysql_query("SELECT name FROM jahrgangsstufe WHERE tag <> '0000-00-00' ORDER BY (TO_DAYS(NOW())-TO_DAYS(tag)) ASC") or die(mysql_error());
                            $last_geburtstagskind = mysql_result($letzter_geburtstag,0);

                            $heute_geburtstag = mysql_query("SELECT name FROM jahrgangsstufe WHERE DAYOFYEAR(tag)=DAYOFYEAR(NOW())");
                            $geburtstagskind = mysql_result($heute_geburtstag,0);
                            if ($geburtstagskind=="") $geburtstagskind = "niemand aus unserer Jahrgangsstufe";

                            echo "<FONT SIZE=\"1\">";
                            echo "Letztes Geburtstagskind: $last_geburtstagskind<BR>";
                            echo "<HR SIZE=\"1\">";

                            echo "Heute, am <B>"; echo date("d.m.y"); echo "</B> feiert $geburtstagskind Geburtstag <BR>";
                            echo "<HR SIZE=\"1\">";

                            echo "Nächstes Geburtstagskind: <BR>";

                            mysql_close($conn_id);
                            ?>

                            cut-----------------

                            ich hoffe es ist etwas verständlich was ich damit will.
                            Um es bildlich zu sehen:

                            http://www.larsi.net/abi2001/anfang.php

                            danke für deine Hilfe...

                            bye, Larsi

                            Kommentar


                            • #15
                              Mach mal bitte ein

                              $test = mysql_query("SELECT name,(TO_DAYS(NOW())-TO_DAYS(tag)) AS blub FROM jahrgangsstufe WHERE tag <> '0000-00-00' ORDER BY (TO_DAYS(NOW())-TO_DAYS(tag)) ASC") or die(mysql_error());

                              while ($testdata = mysql_fetch_array($test)) {
                              echo 'Name: '.$testdata[name].' / Ergebnis: '.$testdata[blub].'<br>';
                              }

                              CAT Music Files

                              Kommentar

                              Lädt...
                              X