2015-01-02 36 views
0

如何統計年齡等於18歲的人數?如何統計年齡等於特定數量的人數?

<?php $emp_query=mysql_query("SELECT 
    'employeeID', 
    `LastName`, 
    `birthday`, 
    (YEAR(CURRENT_DATE)-YEAR(`birthday`))-(RIGHT(CURRENT_DATE,5)<RIGHT(`birthday`,5) 
) AS `age` 
FROM `employee` 
ORDER BY `LastName`"); 
while($row=mysql_fetch_array($emp_query)){ $id=$row['employeeID']; ?> 
       <td><?php echo $row['LastName']; ?></td> 
          <td><?php echo $row['birthday']; ?></td> 
          <td><?php echo $row['age']?></td> 

<?php } ?> 
+0

你需要讀懂mysql的集合函數。此外,不要使用mysql_ *作爲新代碼,它已被棄用,不能正確支持Mysql 5,不安全,並且將來將從PHP中刪除。改用mysqli或PDO。 – GordonM

+0

你能概述這個代碼的具體問題嗎? – halfer

回答

2

如果你滿意你的age計算,那麼你就可以改寫查詢作爲:

SELECT COUNT(*) 
FROM (SELECT (YEAR(CURRENT_DATE)-YEAR(`birthday`))-(RIGHT(CURRENT_DATE,5)<RIGHT(`birthday`,5) 
      ) AS `age` 
     FROM `employee` 
    ) e 
WHERE age = 18; 
+0

我以爲你不能在'WHERE'子句中使用別名? – martincarlin87

+0

@ martincarlin87。 。 。它使用子查詢。當在'select'中定義的'where'子句在同一級別時,不能使用別名。 –

+0

啊,剛注意到子查詢,我的不好。 – martincarlin87

0

可以使用DATEDIFF() -function減去與其他日期的日期得到的差異日期以天爲單位。

SELECT 
    `employeeID`, 
    `LastName`, 
    `birthday` 
FROM 
    `employee` 
WHERE 
    DATEDIFF(`birthday`, CURDATE())/365 < specified_age 

最好是限定爲stored procedure它,它允許一個動態輸入(specified_age),並返回滿足條件的行。如果您只有一個輸入,只需將年數中的specified_age替換爲一個數字即可。 Fe 18歲以下,請改爲18

+1

閏年呢? –

+0

應該有一個MySQL函數來從另一個日期中減去一個日期,並在多年內表達結果。 – halfer

0

像這樣的東西應該工作:

$emp_query = mysql_query("SELECT 
`employeeID`, 
`LastName`, 
`birthday`, 
`year`, 
`age` 
WHERE `age` = $number 
FROM `employee` 
ORDER BY `LastName`"); 

然後「號碼」你可以從一個形式,例如$數= $ _ POST [「表單」]獲得;

如果這是您的設置,否則您可以在查詢中換出$號碼以獲取特定號碼並上傳文件。

//做你的while或foreach循環

+1

OP的數據庫沒有「年齡」欄,但有一個「生日」。另請注意,您的答案允許使用SQLi幷包含不推薦使用的函數('mysql_query()')。 – KarelG

+0

@KarelG真的,沒想到那個tbh。 OP應該使他更容易,添加列並開始使用PDO或sqli。對於OP:抓住我的答​​案。 –