У меня есть довольно привлекательный запрос, потому что я пытаюсь сохранить математику из кода приложения и в запросе. Я пытаюсь установить переменную в select, а затем повторно использовать ее в том же select. К сожалению, любой из моих столбцов, где я использую эти переменные, возвращает null, где должны быть данные. Все остальное работает нормально.Mysql using переменная в select
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
колонн возвращаются нулем, я предполагаю, потому что запрос не может получить доступ к ранее определенному переменным.
Это мой первый раз, когда я использую переменные пользователя MySQL (я разработчик, а не администратор базы данных), и я не уверен, что я что-то делаю неправильно, и если да, то как это исправить. Я могу сделать математику в коде, если мне это нужно, но мне бы очень хотелось сохранить ее на сервере базы данных, поскольку она намного лучше, чем сервер приложений, и может справиться с этим проще.
К сожалению, предыдущие переменные не определены. И вам придется либо заменить формулы вместо них. Или вычислить в коде (лучший вариант). – user4035
Похоже, ты прав. Можете ли вы опубликовать это как ответ, чтобы я мог его принять? – Kevin