 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
13.05.2008, 14:32
|
#1
|
|
TP-Senior
Registriert seit: May 2004
|
[PHP/mySQL] Abfrage mit Datum
In der Tabelle steht u.a. ein Datum, das mit time() erzeugt wurde. Somit steht dort eine wilde Zahlenkombo drin, die keiner wirklich versteht.  Die Spalte mit dem Datum heißt 'tstamp'. Es wird kurz vor der Abfrage noch das aktuelle Jahr ermittelt und in der Variablen $aktjahr gespeichert. In unserem Fall wäre der Wert also 2008.
Nun soll eine DB-Abfrage gestartet werden in der alle Daten ausgelesen werden sollen, die dem aktuellen Jahr entsprechen, somit muss $aktjahr in dem Wert von 'tstamp' enthalten sein. So klappt es nicht:
Code:
mysql_query("SELECT ID FROM tabelle WHERE YEAR('tstamp') = '".$aktjahr."'");
Es gibt kein Fehler, aber das Ergebnis der Abfrage ist gleich 0.  Wieso? Ich denke, es liegt an der Art und Weise, wie ich auf das Jahr in 'tstamp' zugreife, oder?
__________________
<< Meine Ankunft war zeitlich schlecht gewählt...>>
|
|
|
13.05.2008, 15:18
|
#2
|
|
TP-Urgestein
Registriert seit: Nov 2003
Ort: NRW
|
Code:
mysql_query("SELECT ID FROM tabelle WHERE EXTRACT( YEAR FROM `tstamp` ) = '{$aktjahr}'");
|
|
|
13.05.2008, 15:31
|
#3
|
|
TP-Senior
Registriert seit: May 2004
|
*hmm* Erst einmal Danke, aber ne, das will so nicht. Ergebnis ist immer noch 0. Meine tstamp-Werte sehen (vielleicht reden wir aneinander vorbei...?) ungefähr so aus: 1210685242 - Nicht so: 08-05-13 11:30:45. Liegt es daran?
__________________
<< Meine Ankunft war zeitlich schlecht gewählt...>>
|
|
|
13.05.2008, 15:39
|
#4
|
|
TP-Senior
Registriert seit: Oct 2006
Ort: Augsburg
|
Ähm... Was hat denn 'tstamp' für ein Spaltenformat ? Offensichtlich nicht "Date-Time", wa?
Wenn ich meinen Kaffeesatz richtig deute, schreibst du einen PHP-UnixTimestamp in ein SQL-VarChar-Feld oder sowas ähnliches ?!
__________________
quo errat demonstrator
|
|
|
13.05.2008, 15:51
|
#5
|
|
TP-Senior
Registriert seit: May 2004
|
Nein, kein Date-Time. Und Ja UnixTimestamp.
Alle Achtung! Guter Kaffeesatz-Leser! 
__________________
<< Meine Ankunft war zeitlich schlecht gewählt...>>
|
|
|
13.05.2008, 15:53
|
#6
|
|
TP-Urgestein
Registriert seit: Nov 2003
Ort: NRW
|
Zitat:
Zitat von webdepp
PHP-UnixTimestamp in ein SQL-VarChar-Feld oder sowas ähnliches ?!
|
Wenn das stimmt, dann kann man nur sagen, sowas macht man auch nicht. 
Mit einem SQL Timestamp geht das o.g. Statement.
|
|
|
13.05.2008, 15:54
|
#7
|
|
TP-Veteran
Registriert seit: Mar 2005
Ort: Weyhe
|
Wenn es sich beim tstamp tatsächlich um einen Unix-Timestamp handelt, wäre die Abfrage performanter wenn man aus dem aktuellen Jahr den Start- und Endzeitpunkt als Timestamp ermittelt und die Datensätze mittels BETWEEN eingrenzt.
|
|
|
13.05.2008, 16:24
|
#8
|
|
TP-Special Mod
Registriert seit: Feb 2005
Ort: Haan / NRW
|
ich benutze meist FROM_UNIXTIME(timestamp) so das man dann die üblichen Datumsfunktionen nutzen kann.
|
|
|
13.05.2008, 23:46
|
#9
|
|
TP-Senior
Registriert seit: May 2004
|
Okay, wollte jetzt nicht meine DB-Struktur ändern, weil dann extrem viel geändert werden muss im Admin-Bereich und ich noch nicht einmal sicher weiß, ob das Ergebnis so überhaupt gefällt. Deshalb sollte es schon mit meinem UnixTimestamp irgenwie klappen.
Ich habe mal den hier (ohne Erfolg) probiert:
Code:
mysql_query("SELECT ID FROM tabelle WHERE tstamp = ".mktime(0, 0, 0, 1, 1, $aktjahr)."");
Und auch der hier bringt Null Treffer... :
Code:
mysql_query("SELECT ID FROM tabelle WHERE FROM_UNIXTIME('tstamp', '%Y') = '".$aktjahr."'");
Alles plöde...
Nachtrag - So, fiel mir ein: Die erste Abfrage ist wirklich Müll. 
__________________
<< Meine Ankunft war zeitlich schlecht gewählt...>>
Geändert von Magerquark (14.05.2008 um 08:09 Uhr).
Grund: Einsicht
|
|
|
14.05.2008, 09:48
|
#10
|
|
TP-Senior
Registriert seit: May 2004
|
Gelöst
So. Der letzte Entwurf war schon fast richtig. Es waren lediglich zwei Hochkommata zu viel. Also noch einmal: Wer eine Tabelle mit Unix Timestamps hat und daraus eine nach Jahren gezielte Auswahl treffen möchte, der macht so eine Abfrage:
Code:
"SELECT spalten FROM tabelle WHERE FROM_UNIXTIME(tstamp, '%Y') = '".$_GET['jahr']."' ORDER BY tstamp DESC";
Dabei ist tstamp, wie oben schon erwähnt, meine Spalte mit den Unix Timestamps und das Jahr lasse ich mir über eine Variable übergeben (oder wie vorher über eine zuvor ermittelte Jahreszahl ($aktjahr)).
Ich hatte um tstamp in der FROM_UNIXTIME-Klammer zwei Hochkommata. Deswegen klappte es zunächst nicht... - Danke allen Teilnehmern. 
__________________
<< Meine Ankunft war zeitlich schlecht gewählt...>>
|
|
|
14.05.2008, 11:37
|
#11
|
|
TP-Veteran
Registriert seit: Mar 2005
Ort: Weyhe
|
Zitat:
Zitat von DSB
Wenn es sich beim tstamp tatsächlich um einen Unix-Timestamp handelt, wäre die Abfrage performanter wenn man aus dem aktuellen Jahr den Start- und Endzeitpunkt als Timestamp ermittelt und die Datensätze mittels BETWEEN eingrenzt.
|
Mein Vorschlag ist dennoch performanter, weil Du so nur einmalig 2 Integerwerte ermittelst, welche MySQL schneller vergleichen kann.
Bei der Variante mit FROM_UNIXTIME muss MySQL den Wert jedes einzelnen Datensatzes erst errechnen, was Zeit kostet.
|
|
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
Thema durchsuchen |
|
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 00:03 Uhr.
|
 |