2015-03-17 4 views
-1
SELECT sum(amount) as amount , COUNT(userid) as total FROM table1 WHERE userid='1111' union all 
SELECT sum(amount) as amount, COUNT(userid) as total FROM table2 WHERE userid='1111' union all 
SELECT sum(amount) as amount, COUNT(userid) as total FROM table3 WHERE userid='1111' union all 
SELECT sum(amount) as amount, COUNT(userid) as total FROM table4 WHERE userid='1111' union all 
SELECT sum(amount) as amount, COUNT(userid) as total FROM table5 WHERE userid='1111' 

Я нашел это где-то, но не работал для меня.собирать данные из нескольких таблиц со счетами и суммой

Предлагаемое решение:

Другой вариант, чтобы получить данные из всех таблиц отдельно, а затем отобразить его.

Вопрос:

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

Дополнительные примечания: Он должен собрать всю информацию об идентификаторе пользователя = 1111 и сохранить в двух вариантах.

Userid = 1111, может отсутствовать в некоторых таблицах.

Ожидать из будет выглядеть следующим образом:

вашего всего: $ общих | и ваша сумма: $ amount

Основано на предложениях. вот что я получил до сих пор и как я пытаюсь отобразить его. он не отображает ничего без ошибок: Если я использую один запрос, то результаты отображаются в порядке.

<?php 
$sqltotal=mysql_query("SELECT SUM(data.Amount) as Amount ,SUM(data.total) as total 
FROM 
    (
    SELECT COALESCE(sum(amount),0) as amount , COALESCE(COUNT(userid)) as total FROM table1 WHERE userid='1111' 
    UNION ALL 
    SELECT COALESCE(sum(amount),0) as amount, COALESCE(COUNT(userid)) as total FROM table2 WHERE userid='1111' 
    UNION ALL 
    SELECT COALESCE(sum(amount),0) as amount, COALESCE(COUNT(userid)) as total FROM table3 WHERE userid='1111' 
    UNION ALL 
    SELECT COALESCE(sum(amount),0) as amount, COALESCE(COUNT(userid)) as total FROM table4 WHERE userid='1111' 
    UNION ALL 
    SELECT COALESCE(sum(amount),0) as amount, COALESCE(COUNT(userid)) as total FROM table5 WHERE userid='1111' 
) as data 
"); 
while($row = mysql_fetch_array($sqltotal)) 
{ 
echo "$row[total]"; 
echo "$row[sum]"; 
} 

//echo "$yourtotal: $row[total]"; 

?> 
+0

это все ваши таблицы взаимосвязаны Сопутствующие? с 'userID' –

+0

@ameya да, все имеют одинаковый идентификатор пользователя. – zeeshan

+0

, тогда вы должны заглянуть в 'joins' –

ответ

0

Если вам нужен один ряд для всех таблиц просуммировать для столбца amount тогда вобще Outer выбрать на UNION. Теперь, как вы упомянули в комментарии, может быть, некоторые из таблиц могут не содержать UserID, вам нужно использовать COALESCE, чтобы убедиться, что если null, тогда получите 0 в качестве выбранного значения.

SELECT SUM(COALESCE(data.Amount,0)) as Amount ,SUM(COALESCE(data.total,0)) as total 
FROM 
    (
    SELECT COALESCE(sum(amount),0) as amount , COALESCE(COUNT(userid)) as total FROM table1 WHERE userid='1111' 
    UNION ALL 
    SELECT COALESCE(sum(amount),0) as amount, COALESCE(COUNT(userid)) as total FROM table2 WHERE userid='1111' 
    UNION ALL 
    SELECT COALESCE(sum(amount),0) as amount, COALESCE(COUNT(userid)) as total FROM table3 WHERE userid='1111' 
    UNION ALL 
    SELECT COALESCE(sum(amount),0) as amount, COALESCE(COUNT(userid)) as total FROM table4 WHERE userid='1111' 
    UNION ALL 
    SELECT COALESCE(sum(amount),0) as amount, COALESCE(COUNT(userid)) as total FROM table5 WHERE userid='1111' 
) as data 

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

+0

Одно из полей в таблице [количество было названо как ставка], это была проблема. – zeeshan

0
SELECT sum(amount) as amount , COUNT(userid) as total FROM table1 
Group By userid 
+1

Только для кода ответы автоматически помечены как низкое качество и, как таковые, обескуражены в stackoverflow. В будущем, пожалуйста, приучите свой ответ к деталям и объясните, почему это решение вопроса. Это помогает другим пользователям. –

+0

@ Сайка: пожалуйста, уточните свой ответ с некоторым объяснением, показывающим, как он волнует проблему. Это поможет другим, кто увидит ваш код в будущем после поиска. –

+0

Вы можете проверить мои другие ответы, в которых, насколько я объяснил новичкам и тем, кто в ситуации. Если объяснение потребуется, я бы дал. – Sayka

0

Попробуйте это:

SELECT sum(table1.amount + table2.amount + table3.amount + table4.amount) as amount, COUNT(table1.userid) + COUNT(table2.userid) + COUNT(table3.userid) + COUNT(table4.userid) as total 
FROM table1, table2, table3, table4 
WHERE table1.userid='1111' OR table2.userid='1111' OR table3.userid='1111' OR table4.userid='1111' 
+0

не работает. no output – zeeshan

+0

Проверьте это http://sqlfiddle.com/#!9/3dc83/8 –

+0

. Я буду проверять и обновлять здесь, на моем локальном db – zeeshan

Смежные вопросы