Ausgabe ab aktuellem Datum

markberg

Erfahrenes Mitglied
Hallo,
wie kann man bei einer Abfrage nach Datum sortiert es so anstellen, dass mein Kalender nur Einträge ab dem jeweiligen Datum anzeigt!?
Also heute 22.07.05 und alle nachfolgenden Termine anziegen...
Morgen 23.07. und alle nachfolgenden Termine anzeigen...

Und ist es möglich, dass die alten Einträge autom. gelöscht werden?

Vielen Dank für Tipps...

Meine Abfrage zur Zeit:

PHP:
$SQLString = "SELECT * FROM DB136497.kalender WHERE kategorie LIKE 'Party' ORDER BY datumjahr, datummonat, datumtag LIMIT 20";
$Ergebnis = mysql_query($SQLString, $Verbindung);
if ($Ergebnis) {
$Datensatz = mysql_fetch_array ($Ergebnis);
while ($Datensatz) {
echo '<table width=\'580\'>';
echo '<tr><td width=\'80\' valign=\'bottom\' // usw.........
?>
 
Je nach dem, in welcher Form das Datum gespeichert ist, könntest du die Abfrage wie folgt zusammenstellen:
  • bei MySQL-internen Datums- und Zeit-Typen ist es das einfachste mit der ebenfalls MySQL-eigenen NOW()-Funktion zu arbeiten: WHERE `MySQL-interner-Datums-und-Zeit-Typ` > NOW()
  • bei Speicherung der Daten als Unix-Zeitstempel in einem numerischen Spalten-Typ ist es ebenfalls möglich mit einer MySQL-eigenen Funktion zu arbeiten, der UNIX_TIMESTAMP()-Funktion: WHERE `Unix-Zeitstempel-Datum` > UNIX_TIMESTAMP()
Da du jedoch angesichts deiner bisherigen Abfrage wahrscheinlich für jede größe Zeitinheit eine eigene Spalte verwendest, wird die Abfrage etwas komplizierter und dadurch auch sicherlich auch rechenintensiver:
PHP:
<?php

	…
	$SQLString = "
		SELECT
		        *
		  FROM
		        `DB136497`.`kalender`
		  WHERE
		        `kategorie` LIKE 'Party'
		    AND `datumjahr` >= YEAR(NOW())
		    AND `datummonat` >= MONTH(NOW())
		    AND `datumtag` >= DAYOFMONTH(NOW())
		  ORDER BY
		        `datumjahr`,
		        `datummonat`,
		        `datumtag`
		  LIMIT
		        20
		";
	…

?>
 
Erstmal Danke...

habe mir schon gedacht, dass es dann komplizierter wird! Ist es denn möglich, die ganze Sache mit "date" zu gestalten, dieses jedoch in deutsche schreibweise umzuwandeln (tt.mm.jj) und vor allem wie erkläre ich den Usern, dieses auch so einzugeben also 2005.07.21, denn andere schreibweisen werden dann ja garantiert nichts!?

Oder doch lieber drei Spalten und errechnen!?
 
Auch zum Formatieren von Daten besitzt MySQL eine nützliche Funktion, die DATE_FORMAT()-Funktion.

Was die Eingabe von Daten in deutscher Schreibweise angeht, müsstest du wohl auf ein etwas kompliziertes Konstrukt zurückgreifen:
PHP:
<?php

	$string = '22.07.2005';
	if( preg_match('/^([0-9]{1,2})\.([0-9]{1,2})\.([0-9]{4})$/', trim($string), $matches) && checkdate($matches[2], $matches[1], $matches[3]) ) {
		$MySQL_konformes_Datumsformat = $matches[3].'-'.$matches[2].'-'.$matches[1];
	}

?>
Dieses MySQL-konforme Datumsformat kann nun wie eine Zeichenkette einer Spalte mit MySQL-eigenen Datums-Typ zugewiesen werden. Und da du sowieso nur ein Datum und keinen Zeitpunkt speicherst, wäre der DATE-Typ ausreichend.
 
Gumbo hat gesagt.:
Je nach dem, in welcher Form das Datum gespeichert ist, könntest du die Abfrage wie folgt zusammenstellen:
  • bei MySQL-internen Datums- und Zeit-Typen ist es das einfachste mit der ebenfalls MySQL-eigenen NOW()-Funktion zu arbeiten: WHERE `MySQL-interner-Datums-und-Zeit-Typ` > NOW()
  • bei Speicherung der Daten als Unix-Zeitstempel in einem numerischen Spalten-Typ ist es ebenfalls möglich mit einer MySQL-eigenen Funktion zu arbeiten, der UNIX_TIMESTAMP()-Funktion: WHERE `Unix-Zeitstempel-Datum` > UNIX_TIMESTAMP()
Da du jedoch angesichts deiner bisherigen Abfrage wahrscheinlich für jede größe Zeitinheit eine eigene Spalte verwendest, wird die Abfrage etwas komplizierter und dadurch auch sicherlich auch rechenintensiver:
PHP:
<?php

	…
	$SQLString = "
		SELECT
		        *
		  FROM
		        `DB136497`.`kalender`
		  WHERE
		        `kategorie` LIKE 'Party'
		    AND `datumjahr` >= YEAR(NOW())
		    AND `datummonat` >= MONTH(NOW())
		    AND `datumtag` >= DAYOFMONTH(NOW())
		  ORDER BY
		        `datumjahr`,
		        `datummonat`,
		        `datumtag`
		  LIMIT
		        20
		";
	…

?>


hallo,
sorry, war eine Weile nicht online. Ich habe drei Spalten, in denen einfach nur der Tag, Monat, Jahr steht... Kann man diesen Spalten den sagen, dass sie praktisch nur ab dem aktuellen Datum bzw. Tag & Monat anzeigen soll? Mit dem hier genannten Bespiel passiert erstmal nichts?
 
Ich hab gerade selbst gemerkt, dass mein Vorschlag falsch ist.
Neuer Versuch:
PHP:
<?php

	…
	$SQLString = "
		SELECT
		        *
		  FROM
		        `DB136497`.`kalender`
		  WHERE
		        `kategorie` LIKE 'Party'
		    AND TO_DAYS(CONCAT(`datumjahr`, '-', `datummonat`, '-', `datumtag`)) >= TO_DAYS(NOW())
		  ORDER BY
		        `datumjahr` DESC,
		        `datummonat` DESC,
		        `datumtag` DESC
		  LIMIT
		        20
		";
	…

?>
Würdest du eine der oben genannten Varianten zur Speicherung der Daten verwenden, wäre die Abfrage entsprechend einfacher.
 
Hi,

erstmal vielen Dank für Deine Mühe, wenn man das sieht könnte man meinen, Du machst das schon länger :)

Haut aber nicht hin, Fehlermeldung "parse error"!?

Vielleicht sollte ich doch lieber die zuerst hier genannten Varianten nehmen... dann müsste ich mich aber erst reinfummeln... für 'nen Anfänger gar net so einfach :(
 
Ich hab einen Fehler übersehen und ihn nun beseitigt. Probier meinen letzen Vorschlag jetzt noch einmal aus.
 
Ist leider immer noch der "parse error"!

ich habe jetz auch mal als zweite variante hier gelesen, dass man ja das Datum direkt formatiert aus der DB lesen kann. Habe ich so gemacht, ergibt zwar keinen Fehler, aber auch nur Mo., .. aus!?

PHP:
$SQLString = "SELECT * FROM DB136497.kalender WHERE kategorie LIKE 'Party' ORDER BY datum LIMIT 20 ";
$datum = "datum"; 
$dat = explode(".", $datum); //$dat[0] = YYYY, $dat[1] = mm, $dat[2] = dd //
$new_date = $arr[2].".".$arr[1].".".$arr[0]; 					  $Ergebnis = mysql_query($SQLString, $Verbindung);
if ($Ergebnis) {
$Datensatz = mysql_fetch_array ($Ergebnis);
while ($Datensatz) {
echo '<table width=\'580\'>';
echo '<tr><td width=\'80\' valign=\'bottom\'><b>'.$Datensatz["wochentag"].', '.$new_date.'</b></td><td width=\'170\' valign=\'bottom\'>'.$Datensatz["headline"].'</td><td width=\'165\' valign=\'bottom\'>'.$Datensatz["musik"].'.... usw.
 
Zurück