Сравнение переменных внутри оператора IF в MYSQL
У меня есть 3 таблицы: wp_names, wp_payments, wp_renewals. Я использую JOIN в student_id на всех из них.
SELECT s.student_id AS 'Student ID'
,s.student_first_name AS 'First Name'
,@numberofregistrations := count(DISTINCT p.payment_id) as 'Number of Registrations'
,@latestregdate := date(max(p.date)) AS 'Latest Registration'
,@renewals := IF(count(DISTINCT r.date) >= 1, count(DISTINCT r.date), '') as Renewals
,@latestrenewal := date(max(r.date)) AS 'Latest Renewal'
,@latestpayment := IF(@renewals >= 1, @latestrenewal, @latestregdate) AS 'Latest P.'
,DATE_ADD(@latestpayment,INTERVAL 12 MONTH) AS 'Due Renewal'
FROM wp_names AS s
LEFT JOIN wp_payments AS p ON s.student_id = p.student_id
LEFT JOIN wp_renewals AS r ON s.student_id = r.student_id
GROUP BY s.student_id, p.payment_id, p.registration, p.date
Это результат, который я получаю. Обратите внимание, что все последние платежи неверны, а срок продления также неверен.
Как я могу использовать переменные, которые я создал? Я хотел бы использовать их внутри оператора IF, например:
IF (@renewals> = 12, @latesrenewal, @latestregdate).
А также:
DATE_ADD (@latestpayment, ИНТЕРВАЛ 12 МЕСЯЦЕВ)
И, наконец, я не могу понять, как получить количество (DISTINCT p.payment_id), чтобы получить правильный результат "2". Вместо этого он удваивает идентификатор студента "2" и считает 1 для обеих записей.
В итоге, два вопроса:
- Почему переменные не работают так, как я ожидал?
- Почему подсчет не учитывает обе регистрации?
Я ценю любую помощь в этом.