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
Форумы портала PHP.SU :: Версия для печати :: Суммирование значений столбца из 2 таблиц.
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Суммирование значений столбца из 2 таблиц.

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

1. MihaeLVC - 19 Августа, 2014 - 12:43:00 - перейти к сообщению
Здравствуйте, можете помочь с одной вроде бы простой задачкой:
Есть 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, но так и не получилось вывести результат, помогите Закатив глазки
2. Tyoma5891 - 19 Августа, 2014 - 14:04:50 - перейти к сообщению
Сформулируйте задачу по человечески, ничего ж не понятно...
3. MihaeLVC - 20 Августа, 2014 - 08:51:57 - перейти к сообщению
Tyoma5891 пишет:
Сформулируйте задачу по человечески, ничего ж не понятно...


Сформулировал как можно понятнее.
4. Sail - 20 Августа, 2014 - 09:21:10 - перейти к сообщению
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;
5. Tyoma5891 - 20 Августа, 2014 - 09:56:01 - перейти к сообщению
я бы вообще на парился с этими запросами, тем более выполнятся будут дольше)
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.  
6. Мелкий - 20 Августа, 2014 - 10:18:19 - перейти к сообщению
Tyoma5891 пишет:
тем более выполнятся будут дольше)

Докажите. Особенно, с индексом по country и активным query cache.
7. tuareg - 20 Августа, 2014 - 11:00:57 - перейти к сообщению
Мелкий пишет:
Докажите. Особенно, с индексом по country и активным query cache.

По идее при всех равных условиях(с индексом по country и активным query cache) Дольше.
Хотя бы исходя из того, что будет временная таблица создаваться, а по ней еще группировка пойдет.
8. Мелкий - 20 Августа, 2014 - 11:30:32 - перейти к сообщению
tuareg, ту часть, что потратит на группировку и последующее слияние пары массивов PHP, посчитать не забыли? Tyoma5891 ведь не написал ещё с десяток строк до получения адекватного результата.
9. tuareg - 20 Августа, 2014 - 13:43:29 - перейти к сообщению
Да ну какие строки?
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.  
10. MihaeLVC - 20 Августа, 2014 - 19:06:15 - перейти к сообщению
Sail, спасибо получилось, я примерно такой же код делал, не знал про SUBQ.

 

Powered by ExBB FM 1.0 RC1