1

私はこのコードを持っています:

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 ['total'] = 128000ですが、実際には32000である必要があります。これは、複数のaffiliate_valuesとaffiliate_orders_idがあるためです。affilaite_valuesの中には同じ値を持つものがあるため、これらを区別することはできません。affilaite_orders_idにはすべて一意の値がありますが、これには複数の行があり、区別する必要があります。次に、アフィリエイト値は、正確な合計を取得するために、affiliate_orders_idの個別の行に基づいて合計する必要があります。

テーブル内の個別のaffiliate_orders_idの数に基づいて、すべてのaffiliate_valuesの合計を取得しようとしています。

4

1 に答える 1

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

今、これはより大きな問題につながります。テーブルに結合条件がありませんか?通常、クエリで重複する日付が返されることはないはずなので、最初にクエリが正しく結合されていることを再確認することをお勧めします。

于 2013-03-20T14:33:53.900 に答える