Итак, для диаграммы Google мне нужны мои данные в следующем формате:
+--------+---------+---------+---------+
| Month | Store A | Store B | Store C |
+--------+---------+---------+---------+
| May-19 | 9.5 | 9.4 | 8.8 |
| Jun-19 | 7.9 | 9.4 | 7.2 |
| Jul-19 | 9 | 9.3 | 8.8 |
+--------+---------+---------+---------+
Я пытаюсь отформатировать свой SQL-запрос, чтобы справиться с этим:
SELECT
DATE_FORMAT(d.date_submitted,'%b-%y') AS 'Month',
s.name as 'Store',
FORMAT(AVG(d.q1),1) AS 'Satisfaction'
FROM data d
INNER JOIN store_list s ON d.store_list=s.store_id
WHERE d.store_list IN (1,2,3)
GROUP BY store_list, YEAR(d.date_submitted), MONTH(d.date_submitted)
ORDER BY store_list,YEAR(d.date_submitted) ASC, MONTH(d.date_submitted) ASC
Это дает мне данные, но макет неправильный.
+--------+---------+--------------+
| Month | Store | Satisfaction |
+--------+---------+--------------+
| May-19 | Store A | 9.5 |
| Jun-19 | Store A | 7.9 |
| Jul-19 | Store A | 9 |
| May-19 | Store B | 9.4 |
| Jun-19 | Store B | 9.4 |
| Jul-19 | Store B | 9.3 |
| May-19 | Store C | 8.8 |
| Jun-19 | Store C | 7.2 |
| Jul-19 | Store C | 8.8 |
+--------+---------+--------------+
Гугл дал мне это в качестве опции, которую можно использовать в макете Google, но данные совершенно неверны:
SELECT
DATE_FORMAT(date_submitted,'%b-%y') AS 'Month',
IF(store_list=1,FORMAT(AVG(q1),1),NULL) AS 'Store A',
IF(store_list=2,FORMAT(AVG(q1),1),NULL) AS 'Store B',
IF(store_list=3,FORMAT(AVG(q1),1),NULL) AS 'Store C'
FROM data
GROUP BY YEAR(date_submitted), MONTH(date_submitted)
ORDER BY YEAR(date_submitted) ASC, MONTH(date_submitted) ASC
+--------+---------+---------+---------+
| Month | Store A | Store B | Store C |
+--------+---------+---------+---------+
| NULL | NULL | NULL | NULL |
| May-19 | 8.8 | NULL | NULL |
| Jun-19 | 8.7 | NULL | NULL |
| Jul-19 | NULL | 9.2 | NULL |
+--------+---------+---------+---------+
Я предполагаю, что IF и AVG не очень хорошо играют вместе, но не уверен, как еще я собираюсь привести свои данные в правильное расположение ..
[править]
Для одного магазина, который я сейчас использую:
<?php
$sql = "SELECT COUNT(*) as Base, DATE_FORMAT(date_submitted,'%b-%y') AS 'Month', FORMAT(AVG(q1),1) AS 'Satisfaction' FROM data WHERE store_list IN (" . $user_stores . ") GROUP BY YEAR(date_submitted), MONTH(date_submitted) ORDER BY YEAR(date_submitted) ASC, MONTH(date_submitted) ASC";
$Sat = mysqli_query($conn,$sql);
while($row = mysqli_fetch_array($Sat)){
echo "['".$row['Month']."',".$row['Satisfaction'].",'Satisfaction: ".$row['Satisfaction']."\\nBase: ".$row['Base']."'],";
}
?>
, который хорошо работает с моим кодом Google Chart, я не очень много знаю PHP (подобранный в Google), такможет быть, есть другой способ, которым я мог бы передать вывод MySQL в Google Charts - чтобы я мог вернуть массив с рабочим кодом, а затем вписать этот массив в то, что нужно Google вне SQL?