结果和时间表

时间:2015-04-26 08:06:08

标签: php mysql

到目前为止,我已经使用Google电子表格完成了这项工作,但是在导入范围方面存在一些问题,并希望使其变得更好,更美观。在它看起来像这样之前:Link to Google Spreadsheet

我想用MySQL和PHP来做这一切。我在数据库中完成了各种表格(表格:用户,班级,团队,时间,国家)。

现在我到目前为止,通过网络表格,我完成了MySQL表的更新时间,并在时间表中更新状态,完成时间=更新current_timestamp,我想我也有工作排名系统。现在我被困在"时间","不同。领导"," diff.rev"和"速度"

代码到目前为止:

$results = $mysqli->query("
   SELECT klass, nimi, synd, teamnimi, start, TIME('finish') AS finish FROM bc2014 T1 
   INNER JOIN bc2014aeg T2 on T1.bc2014_id = T2.bc2014_id
   WHERE klass = 'DS1 (1 koera toukerattavedu al.14 a.)' ");

print '<table class="mytable7">';
echo "<tr><th>  Klass DS1 $total_tvp1  </th></tr>";
print '</table>';

print '<table class="mytable7">';
echo "<tr><th>koht </th><th>klass </th><th>Liikme nimi </th><th>Synniaeg</th><th>Tiim</th><th>Start</th><th>Finish</th><th>Time</th><th>Dif.Leader</th><th>Dif.Previous</th><th>km/h</th></tr>";
while($row = $results->fetch_array()) {
    $timestamp = strtotime($row['synd']);
    print '<tr>';
    print '<td>' .$row["ranking"].'</td>';
    print '<td>'.removeParanthesis($row["klass"]).'</td>';
    print '<td>'.$row["nimi"].'  '.$row["Perekonnanimi"].'</td>';
    print '<td>'.$date = date('d-m-Y', $timestamp).'</td>';
    print '<td>'.$row["teamnimi"].'</td>';
    print '<td>'.$row["start"].'</td>';
    print '<td>'.$row["finish"].'</td>';
    print '<td>'.$row["sum('finish'-'start'something like that"].'</td>';
    print '<td>'.$row["difleader"].'</td>';
    print '<td>'.$row["difprev"].'</td>';
    print '<td>'.$row["speed"].'</td>';
    print '</tr>';

和视觉:

enter image description here

我试图获得时间,差异速度和工作地点。

2 个答案:

答案 0 :(得分:0)

基本上我从您的代码中可以看到,您使用了太多的打印命令而不是它们,您可以为所有打印命令使用一个打印,这样可以减少加载时间。 问题是你想在页面中显示时间dif.leader及其余部分吗?

答案 1 :(得分:0)

查看http://php.net/manual/de/function.time.php

用它来计算你需要的任何东西。

对于&#39; difleader&#39;你可能有一个单独的查询来查找和存储领导者的时间。

或者你可以先通过你的结果,在那里进行所有计算,然后进行输出。

修改

首先你已经可以在sql中计算运行时间了:

SELECT klass, nimi, synd, teamnimi, start, TIME('finish') AS finish, TIMEDIFF(finish, start) AS runtime
FROM bc2014 T1 
INNER JOIN bc2014aeg T2 on T1.bc2014_id = T2.bc2014_id 
WHERE klass = 'DS1 (1 koera toukerattavedu al.14 a.)'
ORDER BY runtime desc

通过按计算的运行时间排序您的结果,您将把领导者作为您的第一条记录。

接下来,您将遍历结果并计算差异,如下所示:

$html="<table>"; // add your table-header here
$firstloop = true;
$km = 4.25;   // for speed-calculation

while($row = $results->fetch_array()) {
    $timestamp = strtotime($row['synd']);
    if($firstloop) {
        $leader_runtime = $row["runtime"];
    }
    $html.='<tr>';
    $html.='<td>' .$row["ranking"].'</td>';

    $html.='<td>'.removeParanthesis($row["klass"]).'</td>';
    $html.='<td>'.$row["nimi"].'  '.$row["Perekonnanimi"].'</td>';
    $html.='<td>'.$date = date('d-m-Y', $timestamp).'</td>';
    $html.='<td>'.$row["teamnimi"].'</td>';
    $html.='<td>'.$row["start"].'</td>';
    $html.='<td>'.$row["finish"].'</td>';
    $html.='<td>'.$row["runtime"].'</td>';

    $difleader = mktime( date('H',$runtime)-date('H',$leader_runtime), date('i',$runtime)-date('i',$leader_runtime), date('s',$runtime)-date('s',$leader_runtime),0,0,0);
    $html.='<td>'. date('H:i:s', $difleader) .'</td>';

    if(isset($prev_runtime)) {  // only show difference if we have a prev_runtime set already
        $difprev = mktime( date('H',$runtime)-date('H',$prev_runtime), date('i',$runtime)-date('i',$prev_runtime), date('s',$runtime)-date('s',$prev_runtime),0,0,0);
        $html.='<td>'. date('H:i:s', $difprev) .'</td>';
    } 
    else {
        $html.= '<td></td>';
    }
    $html.='<td>'.getspeed(timetohours($row["runtime"]),$km).'</td>';
    $html.='</tr>';

    $prev_runtime = $row["runtime"];
    $firstloop = false;
}
$html.="</table>";
echo $html;

用于speedcalculation编写如下函数:

function getspeed($h,$km) {
  return number_format( $km/$h , 2 );
}

使用辅助函数来计算时间戳的小时数:

function timetohours($t) {
  return date("G",$t)+(date("i",$t)/60)+(date("s",$t)/60/60);
}

由于我不知道你的数据库是什么,我无法测试, 测试时间和速度计算。