如何在表格中显示基于我的数据库的结果? Mysql PHP

时间:2017-02-21 11:42:02

标签: php mysql

我的数据库中有这3个表:

  • Conductores:id_conductor,nombre_conductor
  • Trayectos:id_trayecto,Trayecto,Origen,Destino,Horas_conduccion
  • Viajes:id_viaje,id_conductor,id_trayecto,Salida,Llegada,Horas_conduccion,Disco,Semana

表" Viajes"我每天都会插入卡车司机(指挥)的行程,我想在这样的表格中计算每个卡车司机的行车时间和休息时间:

Tabla Resumen

  

我必须构建此表的代码如下:

The connection to the data base obviously...
<?php
echo "<table border='1'>";
echo "<tr>";
echo "<td><b>Conductor</b></td>";
echo "<td><b>Posicion Actual</b></td>";
// (etc.........)
echo "<td><b>Descansos 11 H.</b></td>";
echo "</tr>";

$sql="SELECT * FROM conductores ";
$resultado=mysql_query($sql);
while($row=mysql_fetch_array($resultado)){
  echo "<tr>";
  echo "<td valign='top'>" . nl2br($row["nombre_conductor"]) . "</td>";
  echo "<td></td>";
  // (etc.........)
  echo "</tr>";
}

我知道如何计算列但仅针对一个卡车司机,例如,如果我想要驱动程序1的当前位置(Posicion Actual),我会这样做:

$result=mysql_query("SELECT Destino FROM trayectos WHERE (SELECT MAX(id_viaje) FROM viajes WHERE id_conductor=1)");
$row = mysql_fetch_array($result, MYSQL_ASSOC);
echo "Posición Actual = " . $row["Destino"];

上周开车时间:

$result = mysql_query("SELECT SEC_TO_TIME (SUM( TIME_TO_SEC(Horas_conduccion))) as total FROM viajes WHERE id_conductor=1 AND semana=week(curdate())-1");
$row = mysql_fetch_array($result, MYSQL_ASSOC);
echo "horas semana anterior = " . $row["total"];

等等。

所以我想为每个卡车司机自动完成,并覆盖孔洞。

你可以帮帮我吗?我有点迷失了。

2 个答案:

答案 0 :(得分:0)

从导体列表中获取每个导体的ID,然后将其传递给查询并循环。

$result=mysql_query("SELECT Destino FROM trayectos WHERE (SELECT MAX(id_viaje) FROM viajes WHERE id_conductor='.$conductor_id)");

答案 1 :(得分:0)

您需要子查询和联接的组合才能将所有这些数据合并到一个查询中。

 SELECT c.*, t1.maxid, tr.Destino, t2.total FROM conductores c
 LEFT JOIN (SELECT id_conductor, MAX(id_viaje) maxid FROM viajes GROUP BY id_conductor) t1 on c.id_conductor = t1.id_conductor
 LEFT JOIN viajes v on t1.maxid=v.id_viaje
 LEFT JOIN trayectos tr on tr.id_trayecto = v.id_trayecto
 LEFT JOIN (SELECT id_conductor, SEC_TO_TIME (SUM( TIME_TO_SEC(Horas_conduccion))) as total
            FROM viajes
            GROUP BY id_conductor 
            WHERE semana=week(curdate())-1) t2 on c.id_conductor=t2.id_conductor

第一个子查询按驱动程序从max(id_viaje)表中检索viajes。然后我再次加入viajes表以获取相应的id_trayecto并使用该数据来获取目的地。

第二个子查询通过驱动程序获取时间摘要。