我有一个网页,其中列出了俱乐部足球运动员的详细信息,他们的出生日期以及他们首次亮相俱乐部的日期,以及他们首次亮相的年龄。 / p>
您可以看到显示的结果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_ * - 但是就这个时代而言任何指针都会非常棒。
答案 0 :(得分:1)
请查看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
会在首次亮相的(绝对)日订购时,为您提供他们首次亮相时的年龄。
您可以通过指定ALIAS(select ... AS yourAlias
)来使用PHP中的mysql函数的结果,并使用此别名,就像它是普通列一样。
编辑:当然,您始终可以为这两个查询添加LIMIT 42
。
还请考虑添加一个包含高层表达式结果的列,并使用trigger进行更新。这对于性能很重要,因为普通查询需要为每一行计算表达式,并且每次执行查询时都要计算,但它们通常不应经常更改。