Вы не зашли.
Главная »
SQL » Объединение SELECT из нескольких таблиц
Как объединить запросы по выводу значений таблиц понятно, а как если нужно сумму вывести?
К примеру
Код:
SELECT SUM(`cost`) FROM `stata` WHERE `mes`="' . $pref . '"; |
SELECT SUM(`cost`) FROM `stata2` WHERE `mes`="' . $pref . '"; |
SELECT SUM(`cost`) FROM `stata3` WHERE `mes`="' . $pref . '"; |
Отредактировано WebGraf (2010.01.24 12:12)
Код:
(SELECT SUM(`stata`.`cost`) FROM `stata` WHERE `mes`="' . $pref . '") UNION |
(SELECT SUM(`stata2`.`cost`) FROM `stata2` WHERE `mes`="' . $pref . '") UNION |
(SELECT SUM(`stata3`.`cost`) FROM `stata3` WHERE `mes`="' . $pref . '"); |
неработает в таком примере
вот если без суммы то выборка чудесно происходит
должно быть ок
Вложения
1.png
98kb
{1288x1004}
[
загрузок: 991]
как тогда сумму вывести на страницу?
$var['SUM(`cost`)'] - не выводит ничего у меня
$var['SUM(`stata`.`cost`)'] выводит только 1 таблицы, только смысл унион отпадает
можно использовать нумерованный массив, а не ассоциативный, можно в запросе указать алиас через оператор AS ( ... SUM(`stata`.`cost`) AS v FROM ....)
Код:
$var = mysql_fetch_array(mysql_query("(SELECT SUM(`stata1`.`cost_rur`) AS cost |
FROM stata1) UNION |
(SELECT SUM(`stata2`.`cost_rur`) AS cost |
FROM stata2) UNION |
(SELECT SUM(`stata3`.`cost_rur`) AS cost |
FROM stata3); ")); |
|
echo $var['cost']; |
в чем ошибка?
#8.
Gemor
Гость
2010.01.24 20:08
Код:
(SELECT SUM(cost_rur) AS cost1 FROM stata1) |
UNION |
(SELECT SUM(cost_rur) AS cost2 FROM stata2) |
UNION |
(SELECT SUM(cost_rur) AS cost3 FROM stata3); |
Код:
$week = mysql_fetch_array(mysql_query("(SELECT SUM(`cost_rur`) AS cost, |
COUNT(`cost_rur`) AS kol |
FROM stata1 WHERE |
`msg`='" . $pref . "') UNION |
(SELECT SUM(`cost_rur`) AS cost, |
COUNT(`cost_rur`) AS kol |
FROM stata2 WHERE |
`msg`='" . $pref . "') UNION |
(SELECT SUM(`cost_rur`) AS cost, |
COUNT(`cost_rur`) AS kol |
FROM stata3 WHERE |
`msg`='" . $pref . "'); ")); |
|
$var = $week['cost']; |
Выводит сумму из первой таблицы
Ты все данные вгоняешь в переменные с именами cost и kol. Давай разным выборкам разные имена.
Код:
$week = mysql_fetch_array(mysql_query("(SELECT SUM(`cost_rur`) AS cost1, |
COUNT(`cost_rur`) AS kol1 |
FROM stata1 WHERE |
`msg`='" . $pref . "') UNION |
(SELECT SUM(`cost_rur`) AS cost2, |
COUNT(`cost_rur`) AS kol2 |
FROM stata2 WHERE |
`msg`='" . $pref . "') UNION |
(SELECT SUM(`cost_rur`) AS cost3, |
COUNT(`cost_rur`) AS kol3 |
FROM stata3 WHERE |
`msg`='" . $pref . "'); ")); |
|
$week_sms = $week['kol1'] + $week['kol2'] + $week['kol3']; |
$week_rub = $week['cost1'] + $week['cost2'] + $week['cost3']; |
также из таблицы 1 только
Код:
$week = mysql_fetch_assoc(mysql_query(' |
SELECT SUM(stata1.`cost_rur`) AS cost1, |
COUNT(stata1.`cost_rur`) AS kol1, |
SUM(stata2.`cost_rur`) AS cost2, |
COUNT(stata2.`cost_rur`) AS kol2, |
SUM(stata3.`cost_rur`) AS cost3, |
COUNT(stata3.`cost_rur`) AS kol3, |
FROM stata1, stats2, stata3 |
WHERE `msg` = "' . $pref . '" |
')); |
ну чтото подобное с чего я начинал, только cost не 1 а 3
Добавлено спустя 4 минуты 24 секунды: можно вопрос - почему вы используете одинарные кавычке вместо двойных? в этом случае тестировал много раз на скорость выполнения, разницы нету
Отредактировано WebGraf (2010.01.24 23:11)
ничего не выводит
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in
на последнюю строку where ... ));
Отредактировано WebGraf (2010.01.25 00:12)
что-то я туплю
Код:
SELECT SUM(stata1.`cost_rur`) AS cost1, |
COUNT(stata1.`cost_rur`) AS kol1, |
SUM(stata2.`cost_rur`) AS cost2, |
COUNT(stata2.`cost_rur`) AS kol2, |
SUM(stata3.`cost_rur`) AS cost3, |
COUNT(stata3.`cost_rur`) AS kol3, |
FROM stata1, stats2, stata3 |
WHERE stata1.`msg` = "' . $pref . '" |
AND stata2.`msg` = "' . $pref . '" |
AND stata3.`msg` = "' . $pref . '" |
одинарные - просто так правильно.
объясните тогда мне ламеру, какая разница в этом случае: одинарные или двойные. и когда их использовать
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in
COUNT(stata3.`cost_rur`) AS kol3
, убери последнюю запятую))
добавил условие
Код:
AND stata1.`date` <= "' . $finish . '" |
AND stata2.`date` >= "' . $start . '" |
и сервер ушел в раздумья))
короче ну его. пусть будет 3 запроса
на самом деле задача тривиальная. дай небольшой дамп этой бд.