MySql: Datum vergleichen date("d.m.Y")

Hallo zusammen,
Ich habe eine Datenbank user mit dem Feld Name und Bday.

Bday ist im folgenden Format: z.B. 20.05.1985

Ich möchte nun z.B. Alle Namen aussuchen die im Feld Bday einen
wert >= $alt2r und <= $alt1r haben.

$alt2r und $alt1r sind strings von einen Datum, welches man vorher auswählen konnte. Wie kann ich nun die richtigen Daten ausgeben lassen?

Folgenden Code habe ich benutzt:

Code:
$sql = "
        SELECT
            Benutzername,
			geschlecht,
			bday
			
        FROM
            user
        WHERE
            bday >= $alt2r and bday <= $alt1r ";

Dieser Vergleich funktioniert allerdings nicht.
Ich hoffe, dass ihr mir weiterhelfen könnt.

Mit freundlichen Grüßen,
Georg

:)
 
Da das ein "unförmiges" Datumsformat ist, lässt sich nachdem es eingegeben wurde damit nur noch schwer rechnen und solche vergleiche machen.

Entweder du arbeitest mit den Date Funktionen von MySQL um es in der query in ein gültiges Format umzustellen.. also Jahr-Monat-Tag Oder du könntest alternativ mit LEFT() arbeiten und nur die Jahreszahl verwenden. Wenn es nicht 100% genau sein muss.
 
Versuch mal


Code:
$sql = "
        SELECT
            Benutzername,
			geschlecht,
			bday
			
        FROM
            user
        WHERE
            UNIX_TIMESTAMP(bday) >= $alt2r and UNIX_TIMESTAMP(bday) <= $alt1r ";
 
Das Datum musst du in slashs machen.

Code:
$sql = "
        SELECT
            Benutzername,
			geschlecht,
			bday
			
        FROM
            user
        WHERE
            UNIX_TIMESTAMP(bday) >= '".$alt2r."' and UNIX_TIMESTAMP(bday) <= '".$alt1r."'";
 
@ristone:

Das Funktioniert nicht, siehe Post #1 von ihm:
Bday ist im folgenden Format: z.B. 20.05.1985
Das kann MySQL nicht automatisch umwandeln, da sie im deutschen Format gespeichert sind.


Nach einem Blick ins Handbuch hilft dir so etwas auch sicher weiter, damit kannst du dein falsch formatiertes Datum in eins umwandeln womit die Datenbank arbeiten kann, und dann deine Grlßer / Kleiner vergleiche machen:
SQL:
SELECT STR_TO_DATE( '20.05.1985', '%d.%m.%Y' )
 
Zuletzt bearbeitet:
Jetzt kommen zwar keine Fehlermeldungen mehr, aber ich bekomme überhaupt kein ergebnis angezeigt..

Ich habe als test die Variablen davor definiert:
$alt1r = "12.12.1986";
$alt2r = "12.12.2000";

es gibt dann den Eintrag "20.08.1988" im Feld bday.
Trotzdem bekomme ich nichts angezeigt...

Selbst wenn ich alt1r und alt2r umtausche...
Ich hoffe dass ihr mir weiterhelfen könnt.

Sorry dass ich eure Zeit ein bischen verschwende..

:(
 
Stimmt, aber die sollte man ja wandeln können.

Code:
$sql = "
        SELECT
            Benutzername,
			geschlecht,
			bday
			
        FROM
            user
        WHERE
           STR_TO_DATE(bday, GET_FORMAT( DATE, 'USA' ) ) >= '".$alt2r."' and STR_TO_DATE(bday, GET_FORMAT( DATE, 'USA' ) ) <= '".$alt1r."'";
 
Ich sollte mir abgewöhnen Edit zu verwenden, das ließt keiner mehr ,)

Zum einen ist es das EUR Datum, zum anderen reicht es nicht, da die Sucheingabe sicherlich auch d.m.Y Formatiert sind:

SQL:
SELECT
            Benutzername,
			geschlecht,
			bday
			
        FROM
            user
        WHERE
            STR_TO_DATE( bday, '%d.%m.%Y' ) >= STR_TO_DATE( '$alt2r', '%d.%m.%Y' ) 
and 
STR_TO_DATE( bday, '%d.%m.%Y' ) <= STR_TO_DATE( '$alt1r', '%d.%m.%Y' ) ";
 
Vielen Dank Michael!

Trotzdem werden immer noch keine Ergebnisse angezeigt..
Ich weiß nicht wieso..
Es gibt auch keine Fehlermeldung..

:(

Edit:

Code:
$sql = "
        SELECT
            Benutzername,
			geschlecht,
			bday
			
        FROM
            user
        WHERE
           STR_TO_DATE(bday, '%d.%m.%Y' ) >= STR_TO_DATE( '$alt2r', '%d.%m.%Y' ) 
		   
		   and STR_TO_DATE(bday, '%d.%m.%Y' ) <= STR_TO_DATE( '$alt1r', '%d.%m.%Y' ) ";



Code:
$submit3 = mysql_query ($sql) OR die(mysql_error()); 
 

	
        // Benutzerdaten in ein Array auslesen. 
    while ($data2 = mysql_fetch_array ($submit3))
    { 

echo $data2['Benutzername']."<br>";
}
 
Zuletzt bearbeitet:
Zurück