+ Antworten
Ergebnis 1 bis 11 von 11

Thema: [PHP/mySQL] Abfrage mit Datum

  1. #1
    TP-Senior Magerquark macht alles soweit korrekt Avatar von Magerquark
    Registriert seit
    May 2004
    Beiträge
    226

    [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...>>

  2. #2
    TP-Urgestein webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts Avatar von webcreate
    Registriert seit
    Nov 2003
    Ort
    NRW
    Beiträge
    11.660
    Code:
    mysql_query("SELECT ID FROM tabelle WHERE EXTRACT( YEAR FROM `tstamp` ) = '{$aktjahr}'");
    Gruß Mark

    webcreate IT SOLUTIONS
    www.webcreate-nrw.de

    Photoblog....|....flickr

  3. #3
    TP-Senior Magerquark macht alles soweit korrekt Avatar von Magerquark
    Registriert seit
    May 2004
    Beiträge
    226
    *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...>>

  4. #4
    TP-Senior webdepp macht sich hier sehr viel Mühe
    Registriert seit
    Oct 2006
    Ort
    Augsburg
    Beiträge
    166
    Ä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

  5. #5
    TP-Senior Magerquark macht alles soweit korrekt Avatar von Magerquark
    Registriert seit
    May 2004
    Beiträge
    226
    Nein, kein Date-Time. Und Ja UnixTimestamp.

    Alle Achtung! Guter Kaffeesatz-Leser!
    << Meine Ankunft war zeitlich schlecht gewählt...>>

  6. #6
    TP-Urgestein webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts webcreate ist einer der Eckpfeiler des TP - ohne ihn geht nichts Avatar von webcreate
    Registriert seit
    Nov 2003
    Ort
    NRW
    Beiträge
    11.660
    Zitat Zitat von webdepp Beitrag anzeigen
    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.
    Gruß Mark

    webcreate IT SOLUTIONS
    www.webcreate-nrw.de

    Photoblog....|....flickr

  7. #7
    DSB
    DSB ist offline
    TP-Veteran DSB ist ein richtiges Arbeitstier - DANKE DSB ist ein richtiges Arbeitstier - DANKE DSB ist ein richtiges Arbeitstier - DANKE DSB ist ein richtiges Arbeitstier - DANKE Avatar von DSB
    Registriert seit
    Mar 2005
    Ort
    Weyhe
    Beiträge
    1.137
    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.
    Gruß, DSB
    Einfaches Backup/ Restore Deiner MySQl-Datenbank
    Zend Certified Engineer PHP5

  8. #8
    TP-Special Mod steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User steffenk lebt für das TP und seine User Avatar von steffenk
    Registriert seit
    Feb 2005
    Ort
    Haan / NRW
    Beiträge
    12.869
    ich benutze meist FROM_UNIXTIME(timestamp) so das man dann die üblichen Datumsfunktionen nutzen kann.


    TYPO3 · MySQLDumper · dislabs
    ·
    manche Mühlen mahlen schneller ...
    "Ich habe Rücken"
    Horst Schlämmer


  9. #9
    TP-Senior Magerquark macht alles soweit korrekt Avatar von Magerquark
    Registriert seit
    May 2004
    Beiträge
    226
    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.
    Geändert von Magerquark (14.05.2008 um 08:09 Uhr) Grund: Einsicht
    << Meine Ankunft war zeitlich schlecht gewählt...>>

  10. #10
    TP-Senior Magerquark macht alles soweit korrekt Avatar von Magerquark
    Registriert seit
    May 2004
    Beiträge
    226

    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...>>

  11. #11
    DSB
    DSB ist offline
    TP-Veteran DSB ist ein richtiges Arbeitstier - DANKE DSB ist ein richtiges Arbeitstier - DANKE DSB ist ein richtiges Arbeitstier - DANKE DSB ist ein richtiges Arbeitstier - DANKE Avatar von DSB
    Registriert seit
    Mar 2005
    Ort
    Weyhe
    Beiträge
    1.137
    Zitat Zitat von DSB Beitrag anzeigen
    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.
    Gruß, DSB
    Einfaches Backup/ Restore Deiner MySQl-Datenbank
    Zend Certified Engineer PHP5

+ Antworten

Stichworte

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

     

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51