2

計算をアプリケーション コードから除外してクエリに含めようとしているため、かなり複雑なクエリがあります。選択で変数を設定し、同じ選択で再利用しようとしています。残念ながら、これらの変数を使用する列のいずれかが、データがあるはずの場所で null を返しています。他のすべては正常に機能しています。

SELECT @signups:= COUNT(registrations.id) as signups, 
      @registrations:= SUM(IF(registrations.fees_paid_by_users = '1', registrations.amount - registrations.databar_fees - registrations.taxes - registrations.extras_price + registrations.discount_total, registrations.amount - registrations.taxes - registrations.extras_price + registrations.discount_total)) as registrations,
      @activities:= SUM(registrations.extras_price) as activities,
      @coupons:= SUM(discount_total) as coupons,
      @subtotal:= @registrations + @activities - @coupons as subtotal,
      @fees_not_paid_by_user:= SUM(IF(registrations.fees_paid_by_users = '0', registrations.databar_fees, 0)) as fees_not_paid_by_user,
      @taxes:= SUM(registrations.taxes) as taxes,
      @total_including_taxes:= @subtotal - @fees_not_paid_by_user + @taxes as total_including_taxes,
       events.name, 
       event_forms.title ,
       event_forms.id,
       CONCAT(users.first_name, ' ', users.last_name) as user_name
FROM registrations, 
     events, 
     event_forms, 
     transactions,
     users
WHERE transactions.date >= '2013-09-01 00:00:00' 
AND transactions.date <= '2013-09-30 23:59:59'
AND registrations.transaction_id = transactions.id
AND registrations.event_forms_id = event_forms.id
AND event_forms.event_id = events.id
AND events.owner_id = users.id
GROUP BY registrations.event_forms_id
ORDER BY user_name ASC, name ASC, title ASC

上記のクエリではsubtotal、列とtotal_including_taxes列が null を返しています。これは、クエリが以前に定義された変数にアクセスできないためだと思います。

MySQL のユーザー変数を実際に使用するのはこれが初めてです (私は開発者であり、DBA ではありません)。必要に応じてコードで計算を行うこともできますが、アプリケーション サーバーよりもはるかに強力で、これを簡単に処理できるため、データベース サーバーに保持したいと考えています。

4

2 に答える 2

0

残念ながら、クエリの前の変数は未定義です。それらの代わりに式を置き換える必要があります。または、コード内で次の変数を計算します。

于 2013-10-02T17:21:50.210 に答える
0

クエリを考えると、SUM(SUM(...)) を実行しています。SUM はフィールド値を加算することを目的としていますが、変数が同じことを行うとは思えません。

SELECT ..
   @foo := SUM(...),
   @bar := SUM(@foo)

だけかもしれません

   @bar := @bar + @foo
于 2013-10-01T21:22:00.843 に答える