作为我正在尝试做的简要说明:
我有一个包含各种列的MySql数据库。其中一列是“生日”列,其中包含用户的出生日期。
我要做的是在本专栏中记录所有出生日期,将它们转换为年龄,然后算出平均年龄/平均年龄。
所以...我已经得到了两个部分的代码工作,我只是不能让它们一起工作!
我可以提供生日功能,我有一个出生日期,它会把它变成一个年龄。
我可以将所有出生日期都放到一个数组中。
我不能做的就是这里的任何事情。基本上,我无法将数组转入年龄并计算出均值,这让我疯狂。我是PHP的新手,但到目前为止,我已经完成了相当多的工作。
真的很感谢帮助让这个工作!我只是不知道从下面去哪里。
这是我的代码:
// Age calculation
function CalculateAge($BirthDate)
{
// Put the year, month and day in separate variables
list($Day, $Month, $Year) = explode("/", $BirthDate);
$YearDiff = date("Y") - $Year;
// If the birthday hasn't arrived yet this year, the person is one year younger
if(date("m") < $Month || (date("m") == $Month && date("d") < $DayDiff))
{
$YearDiff--;
}
return $YearDiff;
}
// How to use the function
// CalculateAge("24/06/1991");
//Birthdate array
$ages = mysql_query("SELECT birthday FROM user_records");
$agearray = array();
while($row=mysql_fetch_assoc($ages)) {array_push($agearray, $row);}
感谢您提前提供任何帮助。
答案 0 :(得分:2)
请记住$ row是一个关联数组而不是字符串变量,因此您需要执行$ row ['birthday']或者您将数组对象传入函数。我在下面的代码中解释过。
希望有所帮助
// Age calculation
function CalculateAge($BirthDate)
{
// Put the year, month and day in separate variables
list($Day, $Month, $Year) = explode("/", $BirthDate);
$YearDiff = date("Y") - $Year;
// If the birthday hasn't arrived yet this year, the person is one year younger
if(date("m") < $Month || (date("m") == $Month && date("d") < $DayDiff))
{
$YearDiff--;
}
return $YearDiff;
}
// How to use the function
// CalculateAge("24/06/1991");
//Birthdate array
$birthdays = mysql_query("SELECT birthday FROM user_records");
$birthdaysArray = array();
while($row=mysql_fetch_assoc($birthdays)) { $birthdaysArray[] = $row['birthday']; }
//LOOP HERE TO FIND AGES
答案 1 :(得分:2)
drop table if exists users;
create table users
(
user_id int unsigned not null auto_increment primary key,
username varchar(32) unique not null,
dob date not null
)
engine=innodb;
insert into users (username, dob) values
('f00','1960-01-01'), ('bar','1970-01-01'),
('alpha','1980-01-01'), ('beta','1990-01-01'),
('delta','2000-01-01'), ('theta','2010-01-01'),
('zeta',curdate());
select
if(sum(a.age) is null, 0, sum(a.age)) as sum_age,
count(*) as count_ages,
if(count(*) = 0, 0, sum(a.age) / count(*)) as avg_age
from
(
select
date_format(now(), '%Y') - date_format(dob, '%Y') - (date_format(now(), '00-%m-%d') < date_format(dob, '00-%m-%d')) as age
from users
) a
+---------+------------+---------+
| sum_age | count_ages | avg_age |
+---------+------------+---------+
| 156 | 7 | 22.2857 |
+---------+------------+---------+
1 row in set (0.00 sec)
答案 2 :(得分:0)
接下来,您需要迭代数组并使用函数转换为age。
$calculated_ages = array();
foreach($agearray as $d)
{
$calculated_ages[] = CalculateAge($d);
}
然后得到平均值。
答案 3 :(得分:0)
不是将其拉入PHP,而是直接从MySQL查询中执行此操作,
例如,以下查询返回以当天为单位的用户的平均年龄:
SELECT AVG(DATEDIFF(NOW(), birthday)) AS AverageAge FROM `user_records`;