Структура
участников id (auto, int), fullName (varchar), isReseller (enum), reseller_id (int), country_id, city_id, town_id, landLine, admin (enum)
подписок id (авто, int), транзакция_id (int), magazine_id (int), груз (varchar), startDate (дата), endDate (дата), активный (перечисление), статус (перечисление) ), reseller_id (int), member_id (int)
транзакции id (auto, int), bankaccount_id (int), member_id (int), creator_admin_id (int), paymentDate (date)
журналы id (auto, int), имя (varchar)
bankaccounts id (auto, int), имя (varchar)
Запрос
SELECT
s.id, s.cargo, s.startDate, s.endDate, s.active, s.status,
mag.name as magazineName,
b.name as bankName, t.id as transaction_id,
m.fullName, m.id as member_id,
mm.fullName as resellerName, mm.id as reseller_id
FROM asw_subscriptions as s
INNER JOIN asw_members as m ON m.id = s.member_id
INNER JOIN asw_transactions as t ON t.id = s.transaction_id
INNER JOIN asw_members as mm ON mm.id = t.member_id
INNER JOIN asw_magazines as mag ON mag.id = s.magazine_id
INNER JOIN asw_bankaccounts as b ON b.id = t.bankaccount_id
WHERE
m.fullName LIKE '%john%' AND
m.country_id = '224' AND
m.admin = '0' AND
m.reseller_id = '45677' AND
s.magazine_id = '1' AND
s.active = '1' AND
s.reseller_id = '45677' AND
t.paymentDate BETWEEN '2011-10-01' AND '2011-10-29' AND
t.creator_admin_id = '45677' OR
t.member_id = '45677'
ORDER BY id DESC LIMIT 0, 25
ПРОБЛЕМА
- Реселлеры могут размещать заказы для других участников.
- Я держу реселлеров в той же базе данных, что и участники. Значение isReseller равно 1.
- Если у участника есть посредник, reseller_id больше 0 (значение идентификатора участника посредника).
- Когда посредник размещает заказ, он также создает запись транзакции.
Приведенный выше запрос показывает, что каждый заказ на подписку выполняется реселлером, независимо от каких-либо критериев поиска участников и статуса подписки (при поиске active = '1'
все равно отображаются все).
Даже если я напишу Джону, он покажет все заказы выбранного реселлера.
Это похоже на то, как если бы я сделал запрос только для поиска заказа посредника с указанными датами оплаты (t.paymentDate BETWEEN '2011-10-01' AND '2011-10-29'
).
Я не знаю, как объяснить эту ситуацию. Если я не понял, пожалуйста, дайте мне знать, я постараюсь отредактировать свой вопрос и быть более конкретным.
Заранее спасибо.