Я пытаюсь создать статистику для системы бронирования библиотеки. Результат моего sql-запроса выглядит следующим образом.
total_no_students | отдел | собственность | месяц 241 | Физика бакалавриат | ноябрь 236 | Физика бакалавриат | декабрь 254 | Физика аспирант | ноябрь 210 | Физика аспирант | декабрь 193 | Архитектура | бакалавриат | ноябрь 181 | Архитектура | бакалавриат | декабрь 127 | Архитектура | аспирант | ноябрь 292 | Архитектура | аспирант | декабрь 134 | Биология бакалавриат | ноябрь 188 | Биология бакалавриат | декабрь 129 | Биология аспирант | ноябрь 219 | Биология аспирант | декабрь
Я пытаюсь использовать php для написания кода для создания таблицы статистики со следующим видом:
| Физико-старшекурсник | Физико-послевузовская | Архитектура-старшекурсник | Архитектура-послевузовский | Ноя | 241 | 254 | 193 | 127 | Дек | 236 | 210 | 181 | 292 |
Я должен преобразовать его с помощью php (техника разворота), используя массивы и некоторые циклы (foreach). Я пытался сделать это, но меня смущают вложенные циклы.
Код, который я написал, выглядит следующим образом:
$ csvArray = array (); $ департаменты = массив («Физика», «Архитектура», «Биология»); $ properties = array («бакалавр», «аспирант»); $ con = mysqli_connect ($ mysql_hostname, $ mysql_user, $ mysql_password, $ mysql_dbname); $ sql = "SELECT count (id) как total_no_students, отдел, свойство, MONTH (table1.created) как месяц ИЗ таблицы 1 оставил JOIN table2 ON table2.barcode = table1.input группировка по отделу, имуществу, месяцу "; $ Рез = mysqli_query ($ против, $ SQL); в то время как ($ строка = mysqli_fetch_array ($ разреш)) { $ time = $ row ['month']; if (! array_key_exists ($ time, $ csvArray)) { foreach ($ департаменты как $ отдел) { $ csvArray [$ Department] = array (); foreach ($ properties как $ property) { $ csvArray [$ Department] [$ property] = array (); } } } $ отдел = $ строка ['отдел']; $ property = $ row ['property']; $ total_no_students = $ row ['total_no_students']; $ csvArray [$ time] [$ департаментов] [$ property] = $ total_no_students; }
Любая помощь, как преобразовать запрос с помощью PHP в приведенной выше таблице?
select "month",
SUM(case when department = 'Physics' and property = 'undergraduate' then total_no_students else 0 end) as "Physics-undergrad",
[...]
from table_name
group by "month"
Предполагая, что вы начинаете со следующей структуры массива:
Array
(
[0] => Array
(
[total_no_students] => 241
[department] => Physics
[property] => undergraduate
[month] => Nov
)
[1] => Array
(
[total_no_students] => 236
[department] => Physics
[property] => undergraduate
[month] => Dec
)
...
Тогда следующий цикл foreach:
$new_array = Array();
foreach( $old_array as $v )
{
if(!isset( $new_array[$v["month"]][($v["department"].'-'.$v["property"])] ))
{
$new_array[$v["month"]][($v["department"].'-'.$v["property"])] = 0;
}
$new_array[$v["month"]][($v["department"].'-'.$v["property"])] += $v["total_no_students"];
}
Будет производить следующее:
Array
(
[Nov] => Array
(
[Physics-undergraduate] => 241
[Physics-postgraduate] => 254
[Architecture-undergraduate] => 193
[Architecture-postgraduate] => 127
[Biology-undergraduate] => 134
[Biology-postgraduate] => 129
)
[Dec] => Array
(
[Physics-undergraduate] => 236
[Physics-postgraduate] => 210
[Architecture-undergraduate] => 181
[Architecture-postgraduate] => 292
[Biology-undergraduate] => 188
[Biology-postgraduate] => 219
)
)
Затем вы можете отобразить, что вы хотите …