sql - найти пользователей как минимум с 1 заказом И иметь условия для каждого заказа. Использовать счет? - PullRequest
0 голосов
/ 24 февраля 2012

Я использую базу данных MySQL в rails 2.3. мои ассоциации моделей, с которыми я взаимодействую в этом запросе, следующие:

модели: пользователи и заказы

пользователи имеют 1 адрес электронной почты

у пользователей много заказов

заказы созданы на дату

Я хочу составить список электронных писем от всех пользователей, у которых есть хотя бы один заказ, с последним заказом не менее 3 месяцев (так, скажем, сегодня, 24 февраля 2012 года, последний заказ был размещен 24 ноября 2011 года или ранее)

Я знаю, как получить заказы, созданные 24 ноября или ранее, с помощью этого запроса:

SELECT * FROM orders WHERE created_at <= "2011-11-24 00:00:00.000000 -08:00"

Я не знаю, как найти пользователей по крайней мере с 1 заказом И иметь эти условия для каждого заказа.

Любая помощь будет принята с благодарностью!

Ответы [ 3 ]

1 голос
/ 24 февраля 2012

У меня есть другой ответ.Я только что заметил, что вы используете рельсы 2.3

В этом случае, возможно:

User.all.orders(:conditions => ["created_at > ?", Time.now - 3.months])

Поместите заказ в качестве области по умолчанию в вашей модели заказа, например,

default_scope :order_by => 'created_at'

Синтаксис может потребовать небольшой работы, так как я в основном использую Rails 3 с синтаксисом AREL

1 голос
/ 24 февраля 2012
SELECT users.email
FROM users
  JOIN
    ( SELECT user_id, MAX(created_at) AS created_at
      FROM orders
      GROUP BY user_id
      HAVING MAX(created_at) < CURDATE() - INTERVAL 3 MONTH
    ) AS oo
    ON oo.user_id = users.id
ORDER BY oo.created_at DESC
0 голосов
/ 24 февраля 2012
SELECT users.email
FROM orders, users
WHERE orders.user_id = users.id
AND orders.created_at < CURDATE() - INTERVAL 3 MONTH
ORDER BY orders.created_at DESC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...