Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 1
Регистрация: 28.05.2015
Сообщений: 14

Объединение (суммирование) одинаковых таблиц

16.06.2015, 11:53. Показов 870. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго дня!

Есть такой запрос:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
for($i = 1; $i <=18; $i++){
    $query="SELECT * FROM 2011_r_".$i." UNION SELECT * FROM 2012_r_".$i."";
//echo $query.'<br>';
    $res = mysql_query($query) or die ('Ошибка базы данных'.mysql_error());
   
    if(mysql_num_rows($res) > 0){
        while($row = mysql_fetch_assoc($res))
        {
            if ($row['pokazatel']!='name' and $row['pokazatel']!='fo')
            {
                foreach($row as $key2 => $value){
                    if($key2 != 'pokazatel') {
                        $data[$key][$i][$row['pokazatel']][$key2] = $value; //$key определяется выше
                 }
                }
            }
        }
    }
}
Все работает но мне кажется очень медленно неправильно

Собственно вопрос. создать запрос в Mysql, чтобы сгенерировать "сводную таблицу".

Структура у таблиц одинаковая.
2011_r_1
uid|all | go | pokazatel
1 | 5 | 4 |pok1
2 | 10 | 2 | pok2

2011_r_2
uid|all | go | pokazatel
1 | 3 | 1 |pok1
2 | 11 | 1| pok2
и т.д.

Нужно получить таблицу
2011_r_result
uid|all |go | pokazatel
1 | 8 | 5 | pok1
2 | 21 | 3 | pok2

Да, показатели могут быть текстовые, соответственно нужна проверка на то, что суммируются цифры..
Заранее благодарю.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.06.2015, 11:53
Ответы с готовыми решениями:

Суммирование данных из двух таблиц таблиц
И так сумма складывается и выводится значение итого, так происходит для двух таблиц. теперь нужно два значения итого сложить друг с другом...

Суммирование данных из разных таблиц в БД!
Здравствуйте! Помогите разобраться, не могу догнать, как написать правильно запрос: У меня есть таблица &quot;Hotels&quot;, где есть...

Объединение 2-х таблиц
Имеется таблица person с id Имеется таблица order в которой так же присутствует id После этого кода в таблицу заносятся данные о...

2
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,844
16.06.2015, 17:03
Цитата Сообщение от dkweb Посмотреть сообщение
1 | 5 | 4 |pok1
+
Цитата Сообщение от dkweb Посмотреть сообщение
1 | 3 | 1 |pok1
=
Цитата Сообщение от dkweb Посмотреть сообщение
1 | 8 | 5 | pok1
По айди мы определяем, что с чем связано. Циферки мы складываем, а показатель одинаковый всегда чтоли?
0
0 / 0 / 1
Регистрация: 28.05.2015
Сообщений: 14
17.06.2015, 12:57  [ТС]
crautcher, их много - порядка 200... но все таблицы по структуре одинаковы

Добавлено через 1 час 37 минут
PHP
1
2
3
4
5
$query="SELECT SUM(all),SUM(go) FROM (
SELECT all, go FROM 2012_r_1_f1
UNION ALL 
SELECT all, go FROM 2012_r_2_f1) 
GROUP BY uid";
в общем ни не получается... need help

Добавлено через 1 час 54 минуты
в общем маниакальными усилиями я дошел до...
SQL
1
SELECT 2012_r_1_f1.pokazatel, (2012_r_1_f1.all + 2012_r_2_f1.all) AS `all`, (2012_r_1_f1.go + 2012_r_2_f1.go) AS `go` FROM 2012_r_1_f1, 2012_r_2_f1 WHERE 2012_r_1_f1.uid = 2012_r_2_f1.uid
оно работает, но таблиц то 83.... это же бред все такие связки "ручками прописывать" - что-то слабо верится, что нет более простого способа...

Добавлено через 7 часов 15 минут
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$sub_query='(';
for($i = 1; $i <=82; $i++){
    $sub_query.='SELECT `uid`, `all` as tot, `go` as tot2
    FROM 2012_r_'.$i.'_f1 where uid=2
    UNION ALL
    ';
}
    $sub_query.='SELECT `uid`, `all` as tot, `go` as tot2
    FROM 2012_r_83_f1 where uid=2
    ) AS Total 
    LEFT JOIN 2012_cfo_f1 ON Total.uid = 2012_cfo_f1.uid';
 
$query="SELECT 2012_cfo_f1.uid, SUM( tot ) as `all` , SUM( tot2 ) as `go` 
FROM ".$sub_query;
окей, продолжаю изыскания...
сделал сумму для одного показателя (uid=2) через третью таблицу 2012_cfo_f1, собственно куда потом все эти данные и нужно будет записать.

но нужны то все показатели... если делать where uid IN (2,3,4), то соответственно он суммирует все в кучу..
истина где-то рядом.. очень нужен ваш "пинок")

Добавлено через 3 часа 23 минуты
В общем хитрО все оказалось...
у меня таблицы в InnoDB, но если их перевести в MyISAM, то можно сделать merge...
А потом уже из merge таблицы сделать выборку в финальную таблицу используя group by..

получилось примерно следующее:
1 итерация (все в кучу)
CREATE TABLE myTotal (uid INT NOT NULL, go varchar(20), KEY(uid))
TYPE=MERGE UNION=(2012_r_1_f1,2012_r_2_f1, ... ,2012_r_83_f1) INSERT_METHOD=LAST;

2 итерация...
CREATE TABLE 2012_rf_f1 as select uid, sum(go) as go FROM `myTotal where 1 GROUP BY uid

как то так... буду проверять, что будет, если в колонках текст

Добавлено через 58 минут
Всем откликнувшимся огромное спасибо-)
Вопрос почти решен... осталось это все записать в новую таблицу.

PHP
1
2
3
4
5
6
7
8
9
$sub_query='(';
for($i = 1; $i <=82; $i++){
    $sub_query.='SELECT `pokazatel`, `uid`, `all` as tot, `go` as tot2 FROM 2012_r_'.$i.'_f1
    UNION ALL 
    ';
}
    $sub_query.='SELECT `pokazatel`,`uid`, `all` as tot, `go` as tot2 FROM 2012_r_83_f1) AS u  GROUP BY uid';
 
   $query="SELECT pokazatel, uid,SUM(tot) as `all`, SUM(tot2) AS `go` FROM ".$sub_query;
Добавлено через 12 минут
мое финальное решение...
PHP
1
2
3
4
5
6
7
8
9
$sub_query='(';
for($i = 1; $i <=82; $i++){
    $sub_query.='SELECT `name_rus`,`pokazatel`, `uid`, `all` as tot, `go` as tot2 FROM 2012_r_'.$i.'_f1
    UNION ALL 
    ';
}
    $sub_query.='SELECT `name_rus`,`pokazatel`,`uid`, `all` as tot, `go` as tot2 FROM 2012_r_83_f1) AS u  GROUP BY uid';
 
$query="CREATE TABLE itog AS SELECT name_rus, pokazatel, uid,SUM(tot) as `all`, SUM(tot2) AS `go` FROM ".$sub_query;
буду признателен за комментарии
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.06.2015, 12:57
Помогаю со студенческими работами здесь

Объединение таблиц
Здравствуйте ув. Форумчане. Решил вернуться к php, и столкнулся с задачей: Объединение таблиц бд. Т.е. задача состоит в том чтобы соединить...

Объединение двух таблиц
Пытаюсь объединить две таблицы и вывести записи по идентификатору cat, каждая таблица имеет разное количество столбцов, например таблица 1:...

Объединение таблиц в массив
Доброго времени суток! Есть 5-и уровневый массив который я занёс в БД, создав четыре таблицы для каждого уровня и одну таблицу с...

Объединение трех таблиц
Добрый день. Подскажите пожалуйста как правильно составить запрос на обьединение из трех таблиц. С двумя таблица знаю как сделать, с 3мя...

Объединение двух таблиц по id
Здравствуйте, у меня есть вопрос. Пробовал найти решение сам, не вышло. Читал справку, форумы, гуглил - не помогло. Решил спросить у вас...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru