我想了解实现这一目标的最有效方法:
我有一个 MySQL 表,其中包含我的用户信息,包括生日 (YYYY/MM/DD)。我的目标是检索一个数组(php),其中包含从 10 到 60 岁的每个年龄的用户总数。我可以只查询我的所有用户,将生日传递给我编写的从生日到年龄的php 函数,然后用总数填充一个数组。但我想知道是否有一种方法可以构建一个为我完成这项工作的 sql 查询?
您应该能够对行进行分组:
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 过滤器 - 修复了日期计算(哎呀!) - 命名新列
SELECT * FROM tableName
WHERE dateOfBirth >= (CURRENT_DATE - INTERVAL 60 YEAR)
AND dateOfBirth <= ( CURRENT_DATE - INTERVAL 10 YEAR )
希望我不会受到数据库专家的抨击...
您将需要使用 MySql 的DATEDIFF()。
SELECT USER, DATEOFBIRTH FROM USERTABLE WHERE DATEDIFF(DATEOFBIRTH,NOW()) < 60;