За последние 24 часа нас посетили 22707 программистов и 1137 роботов. Сейчас ищут 643 программиста ...

суммирование данных из таблицы

Тема в разделе "Сделайте за меня", создана пользователем Ignatnet, 18 янв 2016.

  1. Ignatnet

    Ignatnet Активный пользователь

    С нами с:
    18 янв 2016
    Сообщения:
    14
    Симпатии:
    3
    Есть 40 отделов, каждый отдел вносит свою информацию в таблицу (всего полей 22 и только цифры).
    Админ.
    У него появляется сводная таблица всех отделов с суммированием по столбцам
    Наименование Данные 1 Данные … Данные 22
    Отдел 1 | 10 | 20 | 80
    Отдел 2 | 30 | 40 |40
    Отдел …. | 50 | 30 |50
    Отдел 33 | 10 | 40 |20
    Всего | 100 | 130 |190
    Отдел 34 | 10 | 10 |20
    Отдел …. | 20 | 20 |10
    Отдел 40 | 20 | 20 |30
    Всего | 50 | 50 |60
    Итого | 150 | 180 |250

    В таблице данные не добавляются, а только обновляются.
    Суммирование данных. Судя по таблице, данные делятся на 2 группы, с выводом суммы в каждой группе (Всего), а потом эти группы суммируются (Итого).
    Делать 2 таблицы и их связывать, в той же таблице сделать еще 22 поля и делать выборку.
    Какие варианты есть?
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    Варианты чего? :) Ты хочешь сделать страничку, которая выглядит и работает как лист Excel?
    См. js-компонент handsontable. https://docs.handsontable.com/pro/1.0.0-beta3/demo-summary- ... tions.html

    Добавлено спустя 1 минуту 57 секунд:
    Если речь суммировании в БД, гугли агрегатную функцию SUM()
     
  3. Ignatnet

    Ignatnet Активный пользователь

    С нами с:
    18 янв 2016
    Сообщения:
    14
    Симпатии:
    3
    зачем я буду гуглить, я же и так на форуме, вот здесь http://ags.vrnzags.ru/allprint.php выходная форма журнала. Мне нужно отделы разбить на группы. 1-ая группа = сумма1, 2-ая группа=сумма2, потом сумма1+сумма2=Итог.
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.072
    Симпатии:
    1.237
    Адрес:
    там-сям
    да ты мудрец! )))

    переношу тему в подходящий раздел

    Добавлено спустя 3 минуты 14 секунд:
    так, то у тебя уже есть ответ: сумма по столбцу - функция sum()

    попробуй объяснить нормально что ты имеешь и что хочешь.
     
  5. Ignatnet

    Ignatnet Активный пользователь

    С нами с:
    18 янв 2016
    Сообщения:
    14
    Симпатии:
    3
    Спасибо! прежде чем писать на форуме я пролазил кучу сайтов.
    Код (PHP):
    1. //сумма по полям
    2.     $result = mysql_query("select SUM(tab1) AS t1, SUM(tab2) AS t2, и т.д. from " . $table)
    3. or die(mysql_error()); 
    Код (PHP):
    1. //Здесь выводим сумму по столбцам
    2. while($sm = mysql_fetch_array($result)){
    3.     echo '<tr>';
    4.     echo '<th>Итого: </th>';
    5.     echo '<th>' . $sm['t1'] . '</th>';
    6.     echo '<th>' . $sm['t2'] . '</th>'; 
    и т.д.

    Мне нужно разбить в таблице по группам, 33 отдела в одну группу, 7 в другую, по каждой группе свой результат, а потом общая сумма. см таблицу выше, там цветом выделил (1-ая группа = Всего1, 2-ая группа=Всего2, потом Всего1+Всего2=Итог.)

    Добавлено спустя 59 минут 1 секунду:
    Есть 40 отделов (строки). Для каждого отдела 22 параметра (столбцы).
    Отделы разделены на две группы – в одной группе 33 отдела, в другой 7.
    Необходимо просуммировать данные всех отделов по каждому из параметров в каждой группе.
    Затем просуммировать результаты в каждой из групп.
    Результат вывести в таблицу.

    Подсказка от модератора:
    Любой код или текст конфигурации пишите между тегом [code=php] и [/code].
    Используйте отступы в коде для форматирования текста.
    Это помогает быстрее понять вас, увеличивает шанс на получение ответа.
    Что выделять? Например: PHP, HTML, CSS, JavaScript, SQL, XML, .htaccess, ini, регулярные выражения, код шаблонизаторов, любая другая разметка, результаты array/object dump и т. д.
     
  6. Ignatnet

    Ignatnet Активный пользователь

    С нами с:
    18 янв 2016
    Сообщения:
    14
    Симпатии:
    3
    Мне помогли на другом форуме, намекнули про группы. Все получилось, если нужно, код выложу сюда.
     
  7. RainBowDash

    RainBowDash Активный пользователь

    С нами с:
    22 июл 2013
    Сообщения:
    220
    Симпатии:
    8
    Кто то определённо нагуглит эту тему в будущем , почему бы нет :D
     
  8. Ignatnet

    Ignatnet Активный пользователь

    С нами с:
    18 янв 2016
    Сообщения:
    14
    Симпатии:
    3
    В таблицу добавил дополнительное поле, например «gruppa» (INT)
    Разнес отделы по группам, т.е. просто проставил код 0 и 1. Весь код не мой, нашел на просторах. Остальное дописал сам.
    Код (PHP):
    1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    2. <html>
    3. <head>
    4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    5. <link rel="stylesheet" href="style.css"  type="text/css">
    6. <title>Отчет по АГС ЗАГС</title>
    7. </head>
    8.  
    9. <body>
    10. <center><h3>Государственная регистрация АГС ___ квартал 2016 год.</h3></center>
    11. <?php
    12.     // определяем начальные данные
    13.     $db_host = 'localhost';
    14.     $db_name = 'база';
    15.     $db_username = 'имя';
    16.     $db_password = 'пароль';
    17.     $table = 'таблица';
    18.  
    19.     // соединяемся с сервером базы данных
    20.     $connect_to_db = mysql_connect($db_host, $db_username, $db_password)
    21.     or die("Обрыв провода, возможно мыши: " . mysql_error());
    22.  
    23.     // подключаемся к базе данных
    24.     mysql_select_db($db_name, $connect_to_db)
    25.     or die("Нет подключения к базе, опять мыши?: " . mysql_error());
    26.     mysql_set_charset( 'utf8' );
    27.  
    28.     // выбираем значения по группе «0»
    29.     $qr_result = mysql_query("select * from " . $table ." WHERE gruppa='0'")
    30.     or die(mysql_error());
    31.  
    32.     // выбираем значения города из таблицы по группе «1»
    33.     $vrn_result = mysql_query("select * from " . $table ." WHERE gruppa='1'")
    34.     or die(mysql_error());
    35.  
    36.     //сумма по полям область Всего:
    37.     $sm_obl_result = mysql_query("select gruppa, SUM(tab1) AS t1, SUM(tab2) AS t2, и т.д.
    38. from " . $table . " WHERE gruppa = 0")
    39.  
    40.     //сумма по полям город  - Всего:
    41.     $sm_city_result = mysql_query("select gruppa, SUM(tab1) AS tc1, SUM(tab2) AS tc2, и т.д.
    42. from " . $table . " WHERE gruppa = 1")
    43.  
    44.     //сумма по всем полям - итоговая Итого:
    45.     $sm_all_result = mysql_query("select SUM(tab1) AS ts1, SUM(tab2) AS ts2,  и т.д. from " . $table)
    46.  
    47.     // выводим на страницу сайта заголовки HTML-таблицы
    48.   echo '<table>';
    49.   echo '<tr>';
    50.   echo '<td>наименование</td>';
    51.   echo '<td>Поля таблицы </td>';
    52. echo '<td>Поля таблицы </td>';
    53.   echo '</tr>';
    54.  
    55.    // выводим в HTML-таблицу все данные отделов из таблицы MySQL группы «0»
    56.   while($data = mysql_fetch_array($qr_result)){
    57.     echo '<tr>';
    58.     echo '<td>' . $data['otdel'] . '</td>';
    59.     echo '<td>' . $data['tab1'] . '</td>';
    60.     echo '<td>' . $data['tab2'] . '</td>';
    61.     echo '</tr>';
    62.   }
    63. //Подвал отчета области. Здесь выводим сумму по столбцам по области группа «0» Всего:
    64. while($sm = mysql_fetch_array($sm_obl_result)){
    65.     echo '<tr>';
    66.     echo '<th>Всего: </th>';
    67.     echo '<th>' . $sm['t1'] . '</th>';
    68.     echo '<th>' . $sm['t2'] . '</th>';
    69. echo '</tr>';
    70. }
    71.    // выводим в HTML-таблицу все данные города клиентов из таблицы MySQL группа «1»
    72.   while($data = mysql_fetch_array($vrn_result)){
    73.     echo '<tr>';
    74.     echo '<td>' . $data['otdel'] . '</td>';
    75.     echo '<td>' . $data['tab1'] . '</td>';
    76.     echo '<td>' . $data['tab2'] . '</td>';
    77.    echo '</tr>';
    78.  
    79. }
    80.  
    81. /Подвал отчета города. Здесь выводим сумму по столбцам Всего: группа «1»
    82. while($sm = mysql_fetch_array($sm_city_result)){
    83.     echo '<tr>';
    84.     echo '<th>Всего: </th>';
    85.     echo '<th>' . $sm['tc1'] . '</th>';
    86.     echo '<th>' . $sm['tc2'] . '</th>';
    87.     echo '</tr>';
    88. }
    89.  
    90.  
    91. //Подвал всего отчета. Здесь выводим сумму по всем столбцам ИТОГО:
    92. while($sm = mysql_fetch_array($sm_all_result)){
    93.     echo '<tr>';
    94.     echo '<th>Итого: </th>';
    95.     echo '<th>' . $sm['ts1'] . '</th>';
    96.     echo '<th>' . $sm['ts2'] . '</th>';
    97. echo '</tr>';
    98. }
    99.     echo '</tbody>';
    100.     echo '</table>';
    101.  
    102.     // закрываем соединение с сервером  базы данных
    103.     mysql_close($connect_to_db);
    104. ?>
    105. <code lang="php">
    106. <p>
    107. <input type="button" onclick="this.style='display: none'; print();" value="Распечатать"/></p>
    108. //Когда будем печатать, убираем кнопку, она на бумаге не нужна
    109. </body>
    110. </html>
     
  9. rodent90

    rodent90 Новичок

    С нами с:
    26 мар 2015
    Сообщения:
    533
    Симпатии:
    37
    Ужасно.
     
  10. RainBowDash

    RainBowDash Активный пользователь

    С нами с:
    22 июл 2013
    Сообщения:
    220
    Симпатии:
    8
    Мы все с нетерпением ждём твой идеальный вариант :D
     
  11. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.902
    Симпатии:
    969
    ну... эти пять запросов можно заменить на два и второй с группировкой. или если все равно пых рендерит то эти же пять запросов можно вообще не делать - дернуть таблицу одним запросом эз-из и в пыхе считать групповую статистику. при изменении группы - вывести подытог. по окончанию итерирования результата - просуммировать подытоги показав итог. в любом случае опубликованное решение действительно
     
  12. rodent90

    rodent90 Новичок

    С нами с:
    26 мар 2015
    Сообщения:
    533
    Симпатии:
    37
    А ты тут каким боком вылез вообще?
    Или ты и в правду решил, что я сейчас все переписывать начну и думать за автора.
    Ты ошибся.
    Хотя совет Ganzal'a, поможет решить эту задачу в разы качественнее и интереснее. Да и логика будет, а не как сейчас, индустрия.
    И да! Когда у меня есть желание переписывать за кого-то, я это делаю, когда его нет, я не делаю, логично!