2013-03-20 5 views
1

У меня есть этот код:получать отчетливый MySQL результат одного поля на основе другого поля

select count(distinct affiliate_orders_id) as count 
, sum(affiliate_value) as total 
, sum(affiliate_payment) as payment 
from " . TABLE_AFFILIATE_SALES . " a 
    left join " . TABLE_ORDERS . " o on (a.affiliate_orders_id = o.orders_id) 
where a.affiliate_orders_id = o.orders_id 
and o.orders_status >= " . AFFILIATE_PAYMENT_ORDER_MIN_STATUS . " 
     "; 

    $affiliate_sales_query= tep_db_query($affiliate_sales_raw); 
    $affiliate_sales= tep_db_fetch_array($affiliate_sales_query); 

Итак, $ affiliate_sales [ «общий»] = 128000, когда на самом деле это должно быть 32000 becuase есть несколько affiliate_values ​​и affiliate_orders_id. Некоторые аффилированные_значения имеют одинаковые значения, поэтому они не могут быть разными. У affilaite_orders_id есть все уникальные значения, но есть несколько строк этого и должны быть разными. Затем affiliate_values ​​должен подводить итоги на основе отдельных строк affiliate_orders_id, чтобы получить точную сумму.

Я пытаюсь получить сумму всех affiliate_values, загруженных на сколько различных affiliate_orders_id в таблице.

+0

Что не работает? Это должно работать как запроектированное –

+0

. Я пытаюсь получить сумму полей affiliate_values, но только на основе отдельных полей affiliate_orders_id. Прямо сейчас «total» вытягивает все итоги из этого поля. – sven30

+0

как вы решаете, какую строку вытащить, если есть несколько affiliate_orders_id? –

ответ

0

Основываясь на вашем обновлении, я думаю, что это даст вам то, что вы ищете. Вам необходимо использовать subQuery

SELECT COUNT(a) COUNT, SUM(av) total, SUM(ap) aptotal 
FROM (
    SELECT affiliate_orders_id a, affiliate_value av, SUM(affiliate_payment) AS ap 
from " . TABLE_AFFILIATE_SALES . " a 
    left join " . TABLE_ORDERS . " o on (a.affiliate_orders_id = o.orders_id 
    GROUP BY affiliate_orders_id, affiliate_value) 
where a.affiliate_orders_id = o.orders_id 
and o.orders_status >= " . AFFILIATE_PAYMENT_ORDER_MIN_STATUS . ") a 

Теперь это приводит к большему вопросу. Вам не хватает условия соединения в ваших таблицах? Как правило, вы не должны дублировать дату, возвращаемую в запросе, поэтому я бы предложил дважды проверить, что ваш запрос правильно соединяется.

+0

Хорошо, это добирается. Я не знаю, как включить другое условие выше для суммы (affiliate_payment) в качестве оплаты. – sven30

+0

должен ли быть основан на отличном? или должен быть рассчитан во внутреннем запросе? –

+0

это просто вычисление суммы прямо из всех строк. – sven30

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