2

我想了解实现这一目标的最有效方法:

我有一个 MySQL 表,其中包含我的用户信息,包括生日 (YYYY/MM/DD)。我的目标是检索一个数组(php),其中包含从 10 到 60 岁的每个年龄的用户总数。我可以只查询我的所有用户,将生日传递给我编写的从生日到年龄的php 函数,然后用总数填充一个数组。但我想知道是否有一种方法可以构建一个为我完成这项工作的 sql 查询?

4

3 回答 3

2

您应该能够对行进行分组:

SELECT
    FLOOR(DATEDIFF(NOW(), `birthday`)/365) AS 'Age',
    COUNT(*)
FROM `users`
WHERE FLOOR(DATEDIFF(NOW(), `birthday`)/365) BETWEEN 10 AND 60
AND `id` IN (1, 3, 5, 12, 29)
GROUP BY FLOOR(DATEDIFF(NOW(), `birthday`)/365)
ORDER BY FLOOR(DATEDIFF(NOW(), `birthday`)/365) ASC

结果不会包含没有用户的年龄,但我不确定你为什么需要它。

更新 - 添加了一个 id 过滤器 - 修复了日期计算(哎呀!) - 命名新列

于 2013-01-19T23:26:40.550 回答
0
SELECT * FROM tableName 
         WHERE dateOfBirth >= (CURRENT_DATE - INTERVAL 60 YEAR)   
         AND dateOfBirth <= ( CURRENT_DATE - INTERVAL 10 YEAR )

希望我不会受到数据库专家的抨击...

于 2013-01-19T23:21:49.813 回答
-1

您将需要使用 MySql 的DATEDIFF()

SELECT USER, DATEOFBIRTH FROM USERTABLE WHERE DATEDIFF(DATEOFBIRTH,NOW()) < 60;
于 2013-01-19T23:19:31.657 回答