• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Aus timestamp-Array jedes Jahr einmal auflisten

rapid10

Mitglied
Hallo liebe Gemeinde,

ich habe ein Problem mit dem ich nicht fertig werde. Ich lese aus einer Datenbank verschiedene timestamps und erstelle daraus Jahresunterteilungen. Also jedes Jahr sollte genau einmal vorkommen, vorausgesetzt das Jahr kommt in den timestamps vor.

Nur habe ich jetzt das Problem, dass in einem Jahr bspw. 10 Einträge gemacht wurden. Nun zeigt meine Funktion leider die Jahre mehrmals an, weil ja auch mehrere Einträge in dem Jahr gemacht wurden.

Wie könnte ich das Problem lösen?

Vielen Dank!

PHP:
#Timestamp aus Datenbank holen…

#Die verschiedenen Jahre auflisten
foreach($result as $entry)
{    
    echo '<li>';
    echo '<a href="index.php?year='.date("Y", $entry["date"]).'" title="Jahr 2011">'.date("Y", $entry["date"]).'</a>';
    echo '</li>';
}
 
Werbung:
Werbung:
PHP:
SELECT distinct YEAR(myDate) from MyTable where myDateis not Null

oder wenn du die Anzahl willst

PHP:
SELECT count(*) as Anzahl, YEAR(myDate) from MyTable 
Group By YEAR(myDate) where myDate is not Null
 
Dann machst du was falsch. Welchen Datentyp haben deine Zeitangaben? Wie sieht deine Query jetzt aus? Probiers mal ohne die YEAR() Funktion.
 
Werbung:
Wie gesagt, die Jahresangaben sind timestamps als integer gespeichert. Und jeder timestamp schaut anders aus, da er ja zu einem anderen Zeitpunkt erstellt wurde. Das heißt, es gibt 10 Einträge mit dem Jahr 2010, aber der eine im August und der andere im September.

Query sieht so…
PHP:
$sql = "SELECT DISTINCT YEAR(date) FROM items;";
… und so aus:
PHP:
$sql = "SELECT DISTINCT YEAR(date) AS year FROM items;";
Bei erstem erhalte ich gar keine Ausgabe, beim zweiten wird nur das Jahr 1970 angezeigt, also auch ein Fehler.
 
Wie gesagt, die Jahresangaben sind timestamps als integer gespeichert.

Ich glaube nicht, dass YEAR() aus diesem Timestamp das Jahr auslesen kann. Einfacher wäre es, wenn du die Datums-Typen von MySQL nutzt. Um wieviele Datensätze handelt es sich denn, kannst du die noch korrigieren vom Typ und Inhalt her? Sonst besteht noch die Möglichkeit, aus dem Timestamp das Jahr zu berechnen.
 
Werbung:
Das mit dem Tipp in phpMyAdmin ausprobieren, war super! ;) Habe es jetzt geschafft:

PHP:
$sql = "SELECT DISTINCT YEAR(FROM_UNIXTIME(date)) AS year FROM items";

#Noch die foreach-Schleife ändern:
foreach($result as $entry)
{
    echo '<li>';
    echo '<a href="index.php?year='.$entry["year"].'" title="Jahr $entry["year"]">'.$entry["year"].'</a>';
    echo '</li>';
}
Danke für eure Hilfe!
 
Zurück
Oben