I am trying to return the total of two columns based on the locations associated to each of the two columns. When I use the OR statement like such:
$query = "
SELECT
ec.ElecEnergy,
ec.GasEnergy,
ua.City,
SUM(ec.ElecEnergy) AS ecTotal,
SUM(ec.GasEnergy) AS gcTotal
FROM energyconsumption ec
INNER JOIN useraccount ua ON ec.User = ua.id
WHERE
ua.City ='London'
OR City ='Manchester'
OR City ='Luton'
OR City ='Newcastle'
OR City ='Birmingham'
OR City ='Blackburn'
GROUP BY ec.ElecEnergy, ec.GasEnergy, ua.City
ORDER BY ec.ID ASC
";
$result = mysqli_query($conn,$query);
$r = array();
if ($result->num_rows) {
while ($row = mysqli_fetch_array($result)) {
array_push($r, array(
'ElecConsump' => $row['ecTotal'],
'GasConsump' => $row['gcTotal'],
'Location' => $row['City']
));
}
}
echo json_encode(array('results' => $r));
It just returns everything from my database. What I want is a sum of the columns based for each of the cities I have listed.
I'm not sure what I'm doing wrong.
You only want to include city in the group by, rather than the columns you are aggregating. Remember, the columns in the group by define the rows that are being returned, with unique combinations on each row.
Also, use in . . . much simpler to write and read:
SELECT ua.City, SUM(ec.ElecEnergy) AS ecTotal, SUM(ec.GasEnergy) AS gcTotal
FROM energyconsumption ec INNER JOIN
useraccount ua
ON ec.User = ua.id
WHERE ua.City IN ('London', 'Manchester', 'Luton', 'Newcastle', 'Birmingham', 'Blackburn')
GROUP BY ua.City
ORDER BY ua.City ASC;
Notice that I also changed the ORDER BY clause -- assuming you are returning one row per city.
If you want the totals for all the cities combined, then:
GROUP BY and ORDER BY clauses.ua.city from the SELECT.