Zum Inhalt springen

Brauche dringend Hilfe bei Tabellenabfrage

Erstellt am 26. November 2012 · 4 Antworten · letzte Antwort am 27. November 2012

Tags: Datenbank, Frage

mad1200 ·

Hallo Forum,
ich stehe vor einem Problem an dem ich mir die Zähne ausbeiße.
In einer Tabelle stehen Geburtsdaten der Feldtyp ist int(11).
Im PHP das ausgelesene Geburtsdatum zu verarbeiten ist ja kein Problem.
Ich möchte aber unterschiedliche Altersgruppen abfragen und die Einträge mit listView zeigen.
Da die Einträge in der Tabelle auch negative Zeitstempel erhalten scheint mir eine Abfrage unmöglich bzw.ich komme nicht weiter.
Beispiel aus der tabelle: birthday= -100054800
Meine Abfrage:

SELECT tx_members.* FROM tx_members WHERE pid IN (505)
AND tx_members.deleted=0 AND tx_members.hidden=0 AND FLOOR(((CURDATE() + 0) - DATE_ADD("1970-01-01",INTERVAL birthday SECOND)) / 10000 )
> 41

das Datum ist der 31.10.1966
Ich bekomme keine Ausgabe

Kann mir jemand helfen?

mad1200 ·

Ich habe jetzt diese Abfrage um mal die Daten zu testen

SELECT CURDATE( ) , DATE_FORMAT( DATE_ADD( FROM_UNIXTIME( 0 ) , INTERVAL birthday
SECOND ) ,  "%Y-%m-%d" ) AS geburtsdatum
FROM tx_members

Als Ausgabe erscheint für CURDATE das aktuelle Datum und das Geburtsdatum lesbar in der anderen Spalte.

Mit dieser Abfrage

SELECT tx_mgmembers_members.* FROM tx_mgmembers_members WHERE pid IN (505)
AND tx_mgmembers_members.deleted=0 AND tx_mgmembers_members.hidden=0 AND DATEDIFF(CURDATE(), DATE_FORMAT( DATE_ADD( FROM_UNIXTIME( 0 ) , INTERVAL birthday
SECOND ) , "%Y-%m-%d" )) > 41

erhalte ich alle Datensätze aus der Tabelle.

Benutze ich diese Abfrage

SELECT DATEDIFF( CURDATE( ) , DATE_FORMAT( DATE_ADD( FROM_UNIXTIME( 0 ) , INTERVAL birthday
SECOND ) ,  "%Y-%m-%d" ) ) AS diff
FROM tx_members

erhalte ich Ergebnisse wie diese
16829
4673
4594
Klar, daß diese alle größer sind als 41 und ich alle Datensätze bekomme.
Muß die Differenz der beiden Daten noch durch irgendwas geteilt werden?

mad1200 ·

Jetzt habe ich es😃
Die Differenz durch 365 Tage Teilen und dann habe ich die richtige Ausgabe:

SELECT * FROM tx_members WHERE pid IN (505)
AND tx_members.deleted=0 AND tx__members.hidden=0 AND DATEDIFF(CURDATE(), DATE_FORMAT( DATE_ADD( FROM_UNIXTIME( 0 ) , INTERVAL birthday
SECOND ) , "%Y-%m-%d" )) /366 > 41