Я пытаюсь сформировать запрос для нашего клуба по сбору стипендий, который возвращает все продажи билетов на ужин, а также указывает, является ли каждый член, который приобрел билеты, на свои сборы (выплачивается в течение последних 365 дней). Это будет использоваться для листа входа, который указывает, сколько билетов было куплено, и нужно ли нам попросить их обновить их членство, обновить их контактную информацию и т. Д. Я могу вернуть либо продажи билетов, либо активное членство, но я не может понять, как включить оба запроса в один запрос, поэтому мне не придется использовать массив PHP. Надеюсь, кто-то может помочь:Подзапрос MySQL в рамках самостоятельного присоединения или альтернативы?
/* Вот выдержки из соответствующих таблиц */
+----------+ +--------------------+ +--------------------------+
| members | | store_transactions | | store_product_categories |
+----------+ +--------------------+ +--------------------------+
| id | | id | | id |
| last | | invoice | | category |
| first | | memberID | | officeID |
| spouse | | categoryID | | modified |
| lifetime | | productID | +--------------------------+
| email | | name |
| phone | | price | +-------------+
| created | | quantity | | pmt_methods |
+----------+ | addedBy | +-------------+
| pmtMethod | | id |
| created | | method |
+--------------------+ +-------------+
/* 1-запрос возвращает все продажи MUSTER билет ж/кого добавил (авто сделку через сайт или вручную через клуб сотрудник) и метод PMT (RSVP только наличные деньги, и т.д.) */
SELECT member.last, member.first, member.spouse,
member.email, member.phone,
SUM(transaction.quantity) dinnerTix,
SUM(transaction.price * transaction.quantity) total,
IF (addedBy = '0' OR addedBy IS NULL, 'Website',
CONCAT_WS(' ', officer.first, officer.last))
AS addedBy, method
FROM store_transactions AS transaction
LEFT JOIN members AS member ON transaction.memberID = member.id
LEFT JOIN store_product_categories ON transaction.categoryID =
store_product_categories.id
LEFT JOIN pmt_methods ON transaction.pmtMethod = pmt_methods.id
LEFT JOIN members officer ON officer.id = addedBy
WHERE categoryID = '2'
AND year(transaction.created) = '2015'
AND (name LIKE '%member%')
GROUP BY CONCAT(member.last, '_', member.first)
ORDER BY member.last, member.first;
1-запрос возвращает что-то вроде этого:
+------+-------+--------+-------------+--------------+---
| last | first | spouse | email | phone |
+------+-------+--------+-------------+--------------+---
| Doe | John | Jane | [email protected] | 123-456-7890 |
+------+-------+--------+-------------+--------------+---
---+-----------+--------+-----------+--------+
| dinnerTix | total | addedBy | method |
---+-----------+--------+-----------+--------+
| 5 | 150.00 | President | cash |
---+-----------+--------+-----------+--------+
/* Этот второй запрос возвращает все активные элементы, добавляя 1 год к последней покупке членства, чтобы показать годовой срок действия принадлежности */
SELECT last, first,
DATE_FORMAT(ADDDATE(store_transactions.created, INTERVAL 1 YEAR),
'%M %e, %Y') AS expires
FROM store_transactions
LEFT JOIN members ON store_transactions.memberID = members.id
WHERE store_transactions.created >= SUBDATE(CURDATE(), INTERVAL 1
YEAR) AND categoryID = 1 OR lifetime = 'Y'
GROUP BY members.id
ORDER BY members.last, members.first;
2-й запрос возвращает что-то вроде этого:
+------+-------+-------------+
| last | first | expires |
+------+-------+-------------+
| Doe | John | May 3, 2015 |
+------+-------+-------------+
Я думал было бы просто объединить два запроса, чтобы дата истечения, возвращаемая во втором запросе, была добавлена к каждой строке первого результата запроса. К сожалению, я преследую свой хвост здесь, поэтому любая помощь будет принята с благодарностью! Это был мой первый набег на самодостаточные и псевдонимы таблиц, поэтому я стараюсь расширить горизонты, не нарушая сайт, который работает гладко в течение последних 8 лет! Благодаря!!
Я изменил свои запросы, чтобы вернуть идентификаторы обоих, чтобы избежать проблем с неповторимыми именами (у нас их довольно много на 785 членов) по вашей рекомендации. Спасибо! – psterling