gpt4 book ai didi

php - 如何计算日期之间的差异;限制和排序结果?

转载 作者:行者123 更新时间:2023-11-29 11:55:17 25 4
gpt4 key购买 nike

我有一个网页,上面列出了俱乐部足球运动员的详细信息、他们的出生日期、他们为俱乐部首次亮相的日期以及他们首次亮相的年龄。

可以看到显示的结果here

然而,我想做的最终是按首次亮相年龄对这些信息进行排序,然后将其限制为例如三位最年轻的首次亮相者,但迄今为止尚未成功。

我的主要问题是不知道从哪里开始尝试这个。

数据来自多个表,因此MySQL查询设置如下:

$result = mysql_query("SELECT dateofbirth, firstname, lastname, id FROM playerengine WHERE dateofbirth!='0000-00-00'") or die(mysql_error());
$totalRows = mysql_num_rows($result);

if ($totalRows == 0)
{
echo "";
}
else
{
$todaysDate = date("Y-m-d");

while ($row = mysql_fetch_array( $result ))
{
$playerId = $row['3'];
echo "<tr>";
echo "<td width='20%'>";
echo "".$row['1']."";
echo "</td>";
echo "<td width='20%'>";
echo "".$row['2']."";
echo "</td>";
echo "<td width='20%'>";
echo "".$row['0']."";
echo "</td>";
$debutDate = mysql_query("SELECT re.date,re.venue,re.comp,re.opponent,re.score,re.ID,ce.ID,ce.name,re.season, mt.ID as matchId FROM resultengine re INNER JOIN matchteam mt ON mt.ID=re.ID INNER JOIN clubengine ce ON re.opponent=ce.ID WHERE (mt.ID1 = '".$playerId."' or mt.ID2 = '".$playerId."' or mt.ID3 = '".$playerId."' or mt.ID4 = '".$playerId."' or mt.ID5 = '".$playerId."' or mt.ID6 = '".$playerId."' or mt.ID7 = '".$playerId."' or mt.ID8 = '".$playerId."' or mt.ID9 = '".$playerId."' or mt.ID10 = '".$playerId."' or mt.ID11 = '".$playerId."' or (ID12='".$playerId."' AND SI12 != 0) or (ID13='".$playerId."' AND SI13 != 0) or (ID14='".$playerId."' AND SI14 != 0) or (ID15='".$playerId."' AND SI15 != 0) or (ID16='".$playerId."' AND SI16 != 0) or (ID17='".$playerId."' AND SI17 != 0) or (ID18='".$playerId."' AND SI18 != 0) AND (mt.ID!='1624') AND (mt.ID!='1638') AND (mt.ID!='225') AND (mt.ID!='248')) GROUP BY re.season ORDER BY re.season ASC LIMIT 1") or die(mysql_error());
$totalRows = mysql_num_rows($debutDate);
while ($debutRow = mysql_fetch_array($debutDate))
{
echo "<td width='20%'>";
echo "Debut Date: ".$debutRow['0']."<br />vs.".$debutRow['7'];
echo "</td>";
echo "<td width='20%'>";
$date1 = new DateTime($row['0']);
$date2 = new DateTime($debutRow['0']);
$interval = $date1->diff($date2);
$years = $interval->format('%Y');
$days = $interval->format('%a') - (int)$years*365;
echo "aged ".$years ." years and ". $days." days";
echo "</td>";
}
echo "</tr>";
}
}

我知道 mysql_* 函数在 PHP 中已经被贬值,并且在一切完成/投入使用之前将其更改为 mysqli_* - 但任何关于这个年龄的事情的指针都会很棒。

最佳答案

请查看MySQL date functions 。在你的情况下,datediff可能是您需要的功能。例如。这将为您提供他们首次亮相的年龄(按他们排序)

SELECT dateofbirth, firstname, lastname, id, DATEDIFF(dateofdebut, dateofbirth) AS daysOldOnDebut FROM playerengine WHERE dateofbirth!='0000-00-00' ORDER BY daysOldOnDebut

同时

SELECT dateofbirth, firstname, lastname, id, DATEDIFF(dateofdebut, dateofbirth) AS daysOldOnDebut FROM playerengine WHERE dateofbirth!='0000-00-00' ORDER BY dateofdebut

在按(绝对)首次亮相日期订购时,将为您提供他们首次亮相的年龄(以天为单位)。

您可以通过指定别名(select ... AS yourAlias)来使用 PHP 中 mysql 函数的结果,并像使用普通列一样使用此别名。

编辑:当然,您始终可以向这两个查询添加LIMIT 42

另请考虑添加一列,用于保存上面表达式的结果并使用 trigger 进行更新。 。这对于性能很重要,因为普通查询需要为每一行以及每次执行查询时计算表达式,但它们通常不应频繁更改。

关于php - 如何计算日期之间的差异;限制和排序结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33307289/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com