2017-05-21 1 views
1

Ich bin ein wenig fest, wie dies zu tun ist; Ich bin neu bei all diesen PDO-Sachen und noch nicht ganz daran gewöhnt. Grundsätzlich habe ich zwei Tische, Flüge und Benutzer. Ich würde gerne die Namen aller Flüge finden und dann auf die Tabelle der Benutzer schauen, und SUMME die Spalte "Punkte", wo der Flug einem der Flugnamen entspricht. Das ist, was ich habe, so weit und ich kann nur Fortschritt nicht weiterEcho SUM von MySQL Zeilen mit foreach Anweisung

<?php 
$qry = "SELECT * FROM flights ORDER by points DESC"; 
$stmt = $_dbConn->query($qry); 
$flightRows = $stmt->fetchAll(); 

$flightTotalPoints = []; 
$qry = "SELECT flight, SUM(points) FROM users WHERE flight=:flightName ORDER by SUM(points) DESC"; 
$stmt = $_dbConn->prepare($qry); 
foreach ($flightRows as $flight) { 
    $flightName = $flight["name"]; 
    $stmt->execute(["flightName" => $flightName]); 
    $flightTotalPoints[$flightname] = $stmt->fetchAll(); 
} 


<?php if (!count($flightRows)): ?> 
    <div class="alert alert-warning alert-block"><h4 class="alert-heading">Notice</h4>No flights have been created yet 
    </div> 
<?php else: ?> 
    <div class="span12"> 
     <div class="widget-box"> 
      <div class="widget-title"><span class="icon"><i class="icon-th"></i></span> 
       <h5>Current Point Rankings</h5> 
      </div> 
      <div class="widget-content nopadding"> 
       <table class="table table-bordered"> 
        <thead> 
        <tr> 
         <th>Flight Name</th> 
         <th>Points</th> 
        </tr> 
        </thead> 
        <tbody> 
        <?php foreach ($flightRows as $flight): ?> 
         <tr> 
          <td><?php echo $flight["name"]; ?></td> 
          <td><?php echo $flightTotalPoints[$flight["name"]]; ?></td> 
         </tr> 
        <?php endforeach; ?> 
        </tbody> 
       </table> 
      </div> 
     </div> 

Antwort

4

Sie müssen das sum Feld in SQL holen. Sie können den Alias, um es für eine bessere Klarheit hinzufügen & diesen Wert erhalten, nachdem fetchAll & dann einfach auf den

$flightTotalPoints = []; 
$qry = "SELECT flight, SUM(points) as total_sum FROM users WHERE flight=:flightName ORDER by SUM(points) DESC"; 
$stmt = $_dbConn->prepare($qry); 
foreach ($flightRows as $flight) { 
    $flightName = $flight["name"]; 
    $stmt->execute(["flightName" => $flightName]); 
    $flightTotalPoints[$flightName] = $stmt->fetchAll()[0]['total_sum']; 
} 
$flightTotalPoints gestellt haben
+0

Abgesehen von meinem Fehler im letzten $ flightName (Klein N, oops!), Das funktionierte perfekt! Vielen Dank –

+0

Ahh !! Hab das nicht bemerkt. Das wurde aktualisiert. Froh, dass es für dich funktioniert. –

+0

Die Verwendung von Aliasen ist gut (ich mache es regelmäßig), aber $ flight ['SUM (Punkte)'] 'funktioniert. –