2012-07-11 34 views
5

Tôi có người dùng trong cơ sở dữ liệu MySQL, nơi sinh nhật của họ được lưu trữ ở định dạng DATE (yyyy-mm-dd). Tôi muốn chọn người dùng trong cơ sở dữ liệu với PHP nằm giữa một độ tuổi nhất định.Chọn tất cả người dùng trong một độ tuổi nhất định

Tôi có độ tuổi tối thiểu (18) và tuổi tối đa (21). Tôi biết tôi có thể làm điều gì đó với GIỮA, nhưng vấn đề là tôi chỉ biết năm và không phải là ngày tháng.

Có ai có đề xuất về cách tôi có thể thực hiện việc này không?

Đây là những gì tôi đang làm hiện nay:

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; 
} 

Sau đó, tôi làm điều này:

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

Nhưng điều này không làm việc 100%.

Làm cách nào để chỉ chọn người dùng từ 18 đến 21 tuổi?

+0

đã bạn in ngày của bạn để đảm bảo là chính xác? cũng bạn chỉ có thể làm 'ngày ('Ym-d', strtotime (" - 18 năm "));' hoặc 'ngày ('Ym-d', strtotime (" - $ năm năm "));' –

+0

Trong tất nhiên nó sẽ không hoạt động 100% - vì "tuổi" là một số, nó không có định dạng ngày tháng. Vì vậy, lấy 'ngày' hiện tại và trừ đi độ tuổi sẽ cho kết quả không chính xác. – alfasin

+0

alfasin ... đó là những gì tôi làm trong hàm leeftijden() –

Trả lời

14

Bạn chỉ có thể làm điều đó ngay trong truy vấn:

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

Bằng cách này, bạn không cần một hàm PHP đặc biệt để xây dựng một chuỗi DATE. Đơn giản chỉ cần vượt qua trong các con số và MySQL sẽ làm cho việc so sánh cho bạn. Chỉ cần đảm bảo số cao hơn đến trước trong số BETWEEN.

+0

nhờ công trình này hoàn hảo! –

+0

Tuyệt vời một giải pháp hoàn hảo @Zane Bien bạn có thể trả lời điều này tôi cần nó 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

Hãy thử điều này :::

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

Đã không sử dụng MySQL, nhưng sẽ không mà không sử dụng các chỉ mục? –

+0

Bạn có nghĩa là không sargable ... –

0

thử này

SELECT * FROM rijder WHERE DATEDIFF(NOW(), geboortedatum)/365.25 BETWEEN 18 AND 21 
Các vấn đề liên quan