Я ищу некоторую помощь для создания универсальной функции PHP, которая будет принимать на выходе запроса SQL
ВЫБЕРИТЕ DISTINCT categoryID, StatusID, COUNT (*) ИЗ таблицыA GROUP BY categoryID
Пример результата:
CategoryID StatusID COUNT (*) Категория B В ожидании 1 Категория A в ожидании 4 Категория C в ожидании 3 Категория B Проект 1
В базе данных может быть любое количество CategoryIDs и Status …
и вернуть табличный формат таблицы:
Мой желаемый результат выглядит примерно так:
Сводная таблица статуса по категориям: -------------------------------------------------- ------- | Категория А | Категория B | Категория C | ... | ВСЕГО Завершено | 0 | 1 | 0 | ... | 1 В ожидании | 4 | 0 | 3 | ... | 7 Проект | 0 | 1 | 1 | ... | 2 -------------------------------------------------- ------- ИТОГО: | 4 | 2 | 4 | ... | 10
Я понял это! — Я надеюсь, что это поможет кому-то еще в будущем ..
Это не красивый код, но он работает, и он довольно генетический, поэтому его можно использовать по мере необходимости.
Кто это называется
$ sql = "ВЫБЕРИТЕ DISTINCT categoryID, statusID, COUNT (*) как Количество1 ОТ записей GROUP BY categoryID"; $ results = mysql_query ($ sql, $ con); // Теперь, когда у нас есть и Status, и Category, давайте разместим счетчики в нужных ячейках: echo displayTabularSum ($ myarray, "status", "category", 1);
Теперь функции, которые я использовал:
функция displayTabularSum ($ myarray, $ table1, $ table2, $ includeTotals) { // Сначала получаем все данные из $ table1 в массив $ sql = "SELECT * FROM $ table1 WHERE 1"; $ results = mysql_query ($ sql); $ statusCodes = getsqlresultintoarray ($ results); // Второе: получить все данные из $ table2 в массив $ sql = "SELECT * FROM $ table2 WHERE 1"; $ results = mysql_query ($ sql); $ categoryCodes = getsqlresultintoarray ($ results); // Теперь создаем таблицу результатов с соответствующими значениями в столбцах $ StatusTable = массив (); $ out = ''; $ first = true; $ КТ = массив (); для ($ x = 0; $ x '; for ($ y = 0; $ y '. $ categoryCodes [$ y] [1].' '; } if ($ includeTotals) $ out. = 'Всего'; $ out. = ''; $ first = false; } $ out. = ""; $ out. = "". $ statusCodes [$ x] [1]. ""; $ Гт = 0; для ($ y = 0; $ y "; $ c1 = searchForId ($ categoryCodes [$ y] [0], $ myarray, "categoryID"); $ c2 = searchForId ($ statusCodes [$ x] [0], $ myarray, "statusID"); $ Count1 = 0; $ Же = ($ c1 == $ c2); Если ($ то же самое) { Если ($ c1 == 99999 ИЛИ $ c2 == 99999) { // ничего не делать ... Это NULL } еще { $ Count1 = $ count1 + $ MyArray [$ с1] [ 'Count1']; } } $ out. = $ count1; $ Rt = $ count1 + $ гт; $ СТ [$ у] = $ сТ [$ у] + $ count1; // Сбор итогов столбца $ out. = ""; } if ($ includeTotals) $ out. = ''. $ rT. ''; // отображаем rowTotal $ out. = ""; } if ($ includeTotals) {// Показать столбец Total перед закрытием таблицы. $ СТ1 = 0; $ out. = ""; $ out. = 'Всего:'; для ($ x = 0; $ x '. $ cT [$ x].' '; $ СТ1 = $ СТ1 + $ сТ [$ х]; } $ out. = ''. $ cT1. ''; $ out. = ""; } $ out. = ""; вернуть $ out; } Функция getresultsintoarray1 ($ results) {// Функция для получения всех результатов из SQL-запроса в массив. $ num_rows = mysql_num_rows ($ results); $ MyArray = массив (); if ($ num_rows> 0) { while ($ row = mysql_fetch_assoc ($ results)) { $ myarray [] = $ row; } } еще { echo "В базе данных не найдено данных ..."; снята с охраны ($ MyArray); $ MyArray = массив (); } вернуть $ myarray; } функция getsqlresultintoarray ($ get) // YES { $ num_rows = mysql_num_rows ($ get); $ ReturnArray = массив (); $ I = 0; while ($ row1 = mysql_fetch_array ($ get)) { $ ReturnArray [$ я] [0] = $ row1 [0]; // Это идентификатор $ ReturnArray [$ я] [1] = $ row1 [1]; // Это имя $ Я ++; } return $ returnArray; } функция searchForId ($ id, $ array, $ field) { If (count ($ array)> 0) { foreach ($ array as $ key => $ val) { if ($ val [$ field] === $ id) { вернуть ключ $; } } } возврат 99999; }
Если у кого-то есть идеи относительно того, как его улучшить, я был бы признателен за это!
Других решений пока нет …