На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
    > [Rails] Составной запрос с JOIN, HAVING
      Помогите пожалуйста со запросом в Rails (в частности, версии 2.3)

      Возьмём, скажем, на классической паре Post - Comment:

      показать все посты, у которых есть как минимум один комментарий за предыдущий месяц.

      Post (..., :body, :created_at, :updated_at)
      has_many :comments

      Comment (..., :body, :created_at, :updated_at)
      belongs_to :post

      Вот результаты моих потуг:
      ExpandedWrap disabled
        Post.all(
            :joins => :comments,
            :group => "comments.created_at",
            :having => "COUNT(comments.created_at) > 0",
            :conditions => "comments.created_at > DATE_SUB(NOW(), INTERVAL 1 MONTH)"
        )

      - выдаёт неверный результат.

      Как-то не подружился с having .

      Не обижусь, если дадите пример на чистом SQL.

      Добавлено
      Похоже, что ошибся. Всё верно, только выводит повторяющиеся посты тоже.
        А так будет не проще - Post.all(:joins => :comments, :conditions => {:comments => ['created_at > DATE_SUB(NOW(), INTERVAL 1 MONTH)']}) ?

        Банально джоиним с таблицей комментов и накладываем условие, что дата коммента - меньше месяца назад. Даже так:

        Post.all(:joins => :comments, :conditions => {:comments => ['created_at > ?', Date.today - 1.month]})

        За синтаксис не ручаюсь.
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0166 ]   [ 15 queries used ]   [ Generated: 9.02.23, 00:34 GMT ]