Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Суммирование значений столбца из 2 таблиц.

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
MihaeLVC
Отправлено: 19 Августа, 2014 - 12:43:00
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Авг. 2014  


Помог: 0 раз(а)




Здравствуйте, можете помочь с одной вроде бы простой задачкой:
Есть 2 таблицы table1 и table2 с одинаковыми столбцами.
Нужнен только запрос из table1 и table2 сложить значения country.

Таблица выглядит так:
PHP:
скопировать код в буфер обмена
  1. table1                    table2
  2. (country)                (country)
  3. RU                         RU
  4. RU                         CE
  5. RU                         CE
  6. CE                         DE
  7. DE                         DE


Получится должно так:


Запрос выглядит так:
PHP:
скопировать код в буфер обмена
  1. $sQuery = 'SELECT country, COUNT(0) AS country_count from table1 group by country ORDER BY country_count DESC';


Если бы смог сделать сам, не написал бы. Пробовал делать через Join, Union, IN, но так и не получилось вывести результат, помогите Закатив глазки

(Отредактировано автором: 20 Августа, 2014 - 08:51:25)

 
 Top
Tyoma5891
Отправлено: 19 Августа, 2014 - 14:04:50
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 621
Дата рег-ции: Авг. 2013  


Помог: 5 раз(а)




Сформулируйте задачу по человечески, ничего ж не понятно...
 
 Top
MihaeLVC
Отправлено: 20 Августа, 2014 - 08:51:57
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Авг. 2014  


Помог: 0 раз(а)




Tyoma5891 пишет:
Сформулируйте задачу по человечески, ничего ж не понятно...


Сформулировал как можно понятнее.
 
 Top
Sail
Отправлено: 20 Августа, 2014 - 09:21:10
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




CODE (SQL):
скопировать код в буфер обмена
  1. SELECT `country`, sum(`country_count`) AS country_count
  2. FROM (
  3. SELECT `country`, COUNT(0) AS country_count FROM `table1` GROUP BY `country`
  4. UNION
  5. SELECT `country`, COUNT(0) AS country_count FROM `table2` GROUP BY `country`
  6. ) SUBQ GROUP BY `country` ORDER BY country_count DESC;
 
 Top
Tyoma5891
Отправлено: 20 Августа, 2014 - 09:56:01
Post Id


Частый посетитель


Покинул форум
Сообщений всего: 621
Дата рег-ции: Авг. 2013  


Помог: 5 раз(а)




я бы вообще на парился с этими запросами, тем более выполнятся будут дольше)
PHP:
скопировать код в буфер обмена
  1.  
  2. $query = mysql_query(select country from table1);
  3. $table1Data = mysql_fetch_array($query);
  4. $query = mysql_query(select country from table2);
  5. $table2Data = mysql_fetch_array($query);
  6. $table1Data = array_count_values($table1Data);
  7. $table2Data = array_count_values($table2Data);
  8.  
 
 Top
Мелкий Супермодератор
Отправлено: 20 Августа, 2014 - 10:18:19
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Tyoma5891 пишет:
тем более выполнятся будут дольше)

Докажите. Особенно, с индексом по country и активным query cache.


-----
PostgreSQL DBA
 
 Top
tuareg
Отправлено: 20 Августа, 2014 - 11:00:57
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




Мелкий пишет:
Докажите. Особенно, с индексом по country и активным query cache.

По идее при всех равных условиях(с индексом по country и активным query cache) Дольше.
Хотя бы исходя из того, что будет временная таблица создаваться, а по ней еще группировка пойдет.
 
 Top
Мелкий Супермодератор
Отправлено: 20 Августа, 2014 - 11:30:32
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




tuareg, ту часть, что потратит на группировку и последующее слияние пары массивов PHP, посчитать не забыли? Tyoma5891 ведь не написал ещё с десяток строк до получения адекватного результата.


-----
PostgreSQL DBA
 
 Top
tuareg
Отправлено: 20 Августа, 2014 - 13:43:29
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


Помог: 69 раз(а)




Да ну какие строки?
PHP:
скопировать код в буфер обмена
  1.  
  2. $query = mysql_query(select country from table1);
  3. $array1 = array();
  4. while($table1Data = mysql_fetch_array($query)){
  5.      $array1[$table1Data['страна']] = $table1Data['кол-во'];
  6. }
  7. $query = mysql_query(select country from table2);
  8. $arrayItog = array();
  9. while($table2Data = mysql_fetch_array($query)){
  10.     $arrayItog[$table1Data2['страна']] = (empty($array1[$table1Data2['страна']]) ? $table2Data['кол-во'] : $array1[$table1Data2['кол-во']] + $table2Data['кол-во']);
  11. }
  12. $arrayItog+=$array1;
  13.  
 
 Top
MihaeLVC
Отправлено: 20 Августа, 2014 - 19:06:15
Post Id


Новичок


Покинул форум
Сообщений всего: 8
Дата рег-ции: Авг. 2014  


Помог: 0 раз(а)




Sail, спасибо получилось, я примерно такой же код делал, не знал про SUBQ.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB