mysql / php не уверен, как построить конкретный запрос

0

Я использую PHP и MySQL. У меня есть две таблицы, одна для клиентов и одна для продажи. Моя цель состоит в том, чтобы составить список из 5 клиентов, у которых в прошлом году было более трех регулярных записей о продаже, но за последние три месяца были зарегистрированы нулевые продажи любого типа (в основном постоянные клиенты, которые недавно прекратили покупать). В то же время я хотел бы получить дату последней продажи для каждого из этих клиентов, а также заказать список клиентов по дате их последней продажи в нисходящем направлении. Это также должно ограничить результаты для 5 клиентов.

Итак, для простоты скажем, что таблица "customer" выглядит так:

ID, CUSTOMER_NAME

и таблица 'sale_entry' выглядит так:

ID, Пользовательский ИД, Дата ввода, sale_type (может быть 0 = правильный, 1 = пятно, 2 = контракт)

Поле customer_id в таблице sale_entry, конечно, относится к полю id в таблице клиентов. Любые идеи о том, как наилучшим образом восстановить желаемые данные, приветствуются.

Теги:

1 ответ

0
Лучший ответ

Выполнено с несколькими подзапросами.

$query = 'SELECT DISTINCT'
    .' customers.id'
    .', customers.customer_name'
    .', (SELECT MAX(x.entry_date) FROM sale_entry AS x WHERE x.customer_id = customers.id) AS last_purchase_date'
    .' FROM customers'
    .' WHERE (SELECT COUNT(x.id) FROM sale_entry AS x WHERE x.customer_id = customers.id AND x.type = 0 AND x.entry_date >= \''.date('Y-m-d', strtotime('-1 year')).'\') > 0'
    .' AND (SELECT COUNT(x.id) FROM sale_entry AS x WHERE x.customer_id = customers.id AND x.entry_date >= \''.date('Y-m-d', strtotime('-3 months')).'\') = 0'
    .' ORDER BY last_purchase_date DESC'
    .' LIMIT 5';
  • 0
    Дайте мне знать, если вы можете придумать более эффективный способ.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню