2017-04-25 2 views
2

Hallo Ich versuche, diese SQL-Anfrage in PHP mit PDOStatement auszuführen:PHP PDO wie man eine Anfrage mit mehreren Anfragen ausführt?

CREATE TEMPORARY TABLE r1 
SELECT CONCAT(MONTH(Heure_deb),'/',DAY(Heure_deb)) as 'Date', 
         Heure_deb, 
         Operateur.Id_op , 
         Nom_op , 
         Prenom_op, 
         Nom_act , 
         TIME(Heure_deb) as heure, 
         Commentaire, 
         Type 
         FROM Operateur, Pointage, Activite 
         WHERE Operateur.Id_op = Pointage.Id_op 
         AND Activite.Id_act = Pointage.Id_act 
         ORDER BY date, Id_op, heure 
; 
Create temporary table r2 
SELECT a.Id_op, a.Heure_deb, MIN(b.heure_deb) as fin, TIMEDIFF(b.Heure_deb, a.Heure_deb) as Time_Difference, ROUND(HOUR(TIMEDIFF(b.Heure_deb, a.Heure_deb)) + MINUTE(TIMEDIFF(b.Heure_deb, a.Heure_deb))/60,2) as Decimal_duree 
FROM Pointage a 
LEFT JOIN Pointage b ON a.Id_op = b.Id_op 
WHERE a.heure_deb < b.heure_deb 
Group by a.Id_op, a.Heure_deb 
; 
select CONCAT(MONTH(r1.Heure_deb),'/',DAY(r1.Heure_deb)) as 'Date', 
         TIME(r1.Heure_deb) as heure, 
         r1.Id_op , 
         Nom_op , 
         Prenom_op, 
         Nom_act , 
         Commentaire, 
         Type, 
         Time_Difference, 
         Decimal_duree 
from r1 
LEFT JOIN r2 ON r1.Id_op = r2.Id_op and r1.heure_deb = r2.heure_deb 
Order by Id_op, Date , heure 

Diese Anforderung dieses Request

Aber in PHP in phpMyAdmin kehrt der Abruf nicht funktioniert, return false aber jeder Fehlercode. PHP-Code:

$result=$objPdo->prepare($requete); 
    $result->execute(); 
    $err = $result->errorInfo(); 
    if(!empty($err[2])){ 
    echo"<script type='text/javascript'>alert('Erreur SQL :".$err[2]."');</script>"; 
    }else{ 
    while($row=$result->fetch()){ 
    echo"<tr> 
       <td>".$row['Date']."</td> 
       <td>".$row['heure']."</td> 
       <td>".$row['Nom_op']."</td> 
       <td>".$row['Prenom_op']."</td> 
       <td>".$row['Type']."</td> 
       <td>".$row['Time_Difference']."</td> 
       <td>".$row['Decimal_duree']."</td> 
       <td>".$row['Commentaire']."</td> 
      </tr>"; 
    } 
    echo"</table></div>"; 
} 
+0

Die SQL in Teilen ausgeführt werden soll - Sie können führe sie nicht mit einem Schlag. Ein Vorschlag wäre jedoch anstatt temporäre Tabellen zu erstellen, haben Sie in Betracht gezogen, Ansichten zu verwenden. Dies würde Sie jedes Mal davon abhalten, diese Phase zu machen. –

Antwort

1

Es gibt drei Anfragen in dieser Anfrage und deshalb müssen Sie sie in drei Anrufe laufen, nicht ein:

$objPdo->query("CREATE TEMPORARY TABLE r1 
SELECT CONCAT(MONTH(Heure_deb),'/',DAY(Heure_deb)) as 'Date', 
         Heure_deb, 
         Operateur.Id_op , 
         Nom_op , 
         Prenom_op, 
         Nom_act , 
         TIME(Heure_deb) as heure, 
         Commentaire, 
         Type 
         FROM Operateur, Pointage, Activite 
         WHERE Operateur.Id_op = Pointage.Id_op 
         AND Activite.Id_act = Pointage.Id_act 
         ORDER BY date, Id_op, heure 
;"; 

$objPdo->query("Create temporary table r2 
SELECT a.Id_op, a.Heure_deb, MIN(b.heure_deb) as fin, TIMEDIFF(b.Heure_deb, a.Heure_deb) as Time_Difference, ROUND(HOUR(TIMEDIFF(b.Heure_deb, a.Heure_deb)) + MINUTE(TIMEDIFF(b.Heure_deb, a.Heure_deb))/60,2) as Decimal_duree 
FROM Pointage a 
LEFT JOIN Pointage b ON a.Id_op = b.Id_op 
WHERE a.heure_deb < b.heure_deb 
Group by a.Id_op, a.Heure_deb 
;"; 

$result = $objPdo->query("select CONCAT(MONTH(r1.Heure_deb),'/',DAY(r1.Heure_deb)) as 'Date', 
         TIME(r1.Heure_deb) as heure, 
         r1.Id_op , 
         Nom_op , 
         Prenom_op, 
         Nom_act , 
         Commentaire, 
         Type, 
         Time_Difference, 
         Decimal_duree 
from r1 
LEFT JOIN r2 ON r1.Id_op = r2.Id_op and r1.heure_deb = r2.heure_deb 
Order by Id_op, Date , heure"; 

while($row=$result->fetch()){ 
    echo"<tr> 
      <td>".$row['Date']."</td> 
      <td>".$row['heure']."</td> 
      <td>".$row['Nom_op']."</td> 
      <td>".$row['Prenom_op']."</td> 
      <td>".$row['Type']."</td> 
      <td>".$row['Time_Difference']."</td> 
      <td>".$row['Decimal_duree']."</td> 
      <td>".$row['Commentaire']."</td> 
     </tr>"; 
} 
echo"</table></div>"; 
+0

Vielen Dank, es ist Arbeit –

Verwandte Themen