2017-09-08 10 views
0

フィールドにSUMを持つ結合ステートメントに問題があります。SELECTステートメントの各行のSUM

表1(親): - INT(11) - オートインクリメント

  • Maxspots - INT(11)
    • ID Tripsの Iは、これら2つのテーブルを持っています

      表2(子供):予約

      • ID - INT(11) - オートインクリメント
      • FK_ID - INT(11)
      • スポット - INT(11)

      Iは、次のコードを有する:

      $SQL = "SELECT "; 
      $SQL .= "SUM(Bookings.Spots) as SUMSPOT, Trips.ID, Bookings.FK_ID, Bookings.ID "; 
      $SQL .= "FROM Trips "; 
      $SQL .= "INNER JOIN Bookings on Bookings.FK_ID = Trips.ID"; 
      
      $SQL_Query = mysql_query($SQL); 
      
      $tdOdd = 'style = "background-color: #FFFFFF;"'; 
      $tdEven = 'style = "background-color: #ced4ee;"'; 
      
      echo "<table>"; 
      echo "<tr>"; 
      echo "<th>Trip nr</th>"; 
      echo "<th>Sum of spots</th>"; 
      echo "</tr>"; 
      
      $indx = 1; 
      while ($row = mysql_fetch_array($SQL_Query, MYSQL_ASSOC)) { 
      
      $Tripnr = $row['FK_ID']; 
      $Sumspots = $row['SUMSPOT']; 
      
      if (($indx % 2) == 1) {$rowClass = $tdOdd; } else { $rowClass = $tdEven; } 
      
      echo "<tr ".$rowClass.">"; 
      
      echo "<td>".$Tripnr."</td>"; 
      echo "<td>".$Sumspots."</td>";  
      
      echo "</tr>"; 
      
      $indx++; 
      
      } 
      
      echo "</table>"; 
      
      mysql_free_result($SQL_Query); 
      

      をすべてのスポットの合計(結合内)を含む1つの予約ラインのみを返します。各行のBooking.Spotsの合計を私に与える必要があります。誰にでも助けますか?

    +0

    サンプルテーブルのデータと期待される結果をすべてフォーマット済みのテキストとして追加します。また、クエリをスタンドアロンで表示してください。 – jarlh

    +1

    あなたの選択したクエリで 'group by Spots'を使用しようとしました – KMS

    答えて

    2

    非集計フィールドにはGROUP BYを追加してください。

    $SQL = "SELECT "; 
    $SQL .= "SUM(Bookings.Spots) as SUMSPOT, Trips.ID, Bookings.FK_ID, Bookings.ID "; 
    $SQL .= "FROM Trips "; 
    $SQL .= "INNER JOIN Bookings on Bookings.FK_ID = Trips.ID"; 
    $SQL .= "GROUP BY Trips.ID, Bookings.FK_ID, Bookings.ID"; 
    
    +0

    最後の行でbooking.IDを削除して、iwが完璧に機能しました!ありがとうございました!!! – Jacob

    関連する問題