2012-07-11 11 views
5

Ich habe Benutzer in einer MySQL-Datenbank, wo ihre Geburtstage in einem Format DATE (JJJJ-MM-TT) gespeichert sind. Ich möchte Benutzer in der Datenbank mit PHP auswählen, die zwischen einer bestimmten Altersgruppe liegen.Wählen Sie alle Benutzer innerhalb einer bestimmten Altersgruppe

Was ich habe, ist ein Mindestalter (18) und ein Höchstalter (21). Ich weiß, dass ich etwas mit BETWEEN machen kann, aber das Problem ist, dass ich nur die Jahre kenne und nicht die Daten.

Hat jemand einen Vorschlag, wie ich das machen kann?

Dies ist, was ich derzeit tue:

function leeftijden($age) { 
    $morgen['day'] = date('d'); 
    $morgen['month'] = date('m'); 
    $morgen['year'] = date('Y') - $age; 

    $datum = $morgen['year'] .'-' .$morgen['month'].'-' .$morgen['day']; 

    return $datum; 
} 

Dann sehe ich das:

$maxDatum = leeftijden(18); 
$minDatum = leeftijden(32); 
$sqlRijder = "SELECT * FROM rijder WHERE geboortedatum between '".$minDatum."' AND '".$maxDatum."'"; 

Aber das ist nicht 100% funktioniert.

Wie kann ich nur Benutzer auswählen, die zwischen 18 und 21 Jahre alt sind?

+0

haben Sie Ihre Reisedaten gedruckt, um sicherzustellen, die richtig sind? auch können Sie einfach 'date ('Ym-d', strtotime (" - 18 Jahre "));' oder 'date ('Ym-d', strtotime (" - $ Jahre Jahre "));' –

+0

Of Natürlich wird es nicht 100% funktionieren - weil das "Alter" eine Zahl ist, kommt es nicht im Format des Datums. Wenn man also das aktuelle "Datum" nimmt und das Alter subtrahiert, ergibt dies ein ungenaues Ergebnis. – alfasin

+0

alfasin ... das mache ich in der Funktion leeftijden() –

Antwort

14

Sie können einfach tun es richtig in der Abfrage:

SELECT * 
FROM rijder 
WHERE geboortedatum BETWEEN 
    CURDATE() - INTERVAL 21 YEAR AND 
    CURDATE() - INTERVAL 18 YEAR 

Auf diese Weise Sie Funktion nicht benötigen eine spezielle PHP eine DATE String zu erstellen. Geben Sie einfach die Zahlen ein und MySQL erstellt die Vergleiche für Sie. Stellen Sie nur sicher, dass die höhere Nummer in der BETWEEN zuerst kommt.

+0

danke das funktioniert perfekt! –

+0

Großartig eine perfekte Lösung @Zane Bien können Sie dies beantworten, ich brauche es http://StackOverflow.com/Questions/12000537/Display-Count-Base-on-the-grand-child –

2
SELECT * FROM rijder 
WHERE geboortedatum 
    between date_add(curdate(), interval -18 year) 
    and date_add(curdate(), interval -21 year) 
4

Versuchen Sie, diese :::

Select * from table where (DATEDIFF(dob, DATE(NOW()))/365.25) between 18 and 21 
+1

Haben nicht verwendet MySQL, aber würde nicht die Indizes nicht verwenden? –

+0

Sie meinen, ist nicht sargable ... –

0

versuchen diese

SELECT * FROM rijder WHERE DATEDIFF(NOW(), geboortedatum)/365.25 BETWEEN 18 AND 21 
Verwandte Themen