Проблема SQLite-запроса - PullRequest
       1

Проблема SQLite-запроса

1 голос
/ 17 апреля 2011

Я пытаюсь выбрать все недавние обсуждения, на которые ответил пользователь. Но следующий запрос не работает. Возвращает 0 записей. Я новичок в SQL, я думаю, что-то не так в моем использовании "IN". Помогите, пожалуйста, решить проблему:

    SELECT * FROM discussions 
    WHERE discussable_id IN 
    (SELECT commentable_id FROM comments 
    WHERE commentable_type = 'Discussion' AND user_id = 1);

также, что если я хочу отсортировать вышеуказанный запрос по comment.created_at? Как я могу это сделать? Кроме того, что, если я хочу также включить все обсуждения, созданные пользователем, а также отсортировать все запросы по последним действиям (это может быть Discussion.created_at или comment.created_at). Кстати, я в рельсах. Я пытался решить эту проблему в течение нескольких часов. Был бы очень признателен за любой вклад. Большое спасибо!

ОБНОВЛЕНИЕ 2: Похоже, я должен заменить в запросе обсуждениеable_id на "id", вы заметили это? :) такая утомительная проблема. Теперь, как мне заказать возвращенные обсуждения по comment.created_at? Должен ли я открыть еще один вопрос?

Update1: Извините, вот активная запись:

# Table name: discussions
#
#  id               :integer         not null, primary key
#  title            :string(255)     not null
#  content          :text(255)       not null
#  created_at       :datetime
#  updated_at       :datetime
#  user_id          :integer
#  discussable_id   :integer
#  discussable_type :string(255)
class Discussion < ActiveRecord::Base
  has_many    :comments, :as => :commentable, :dependent => :destroy
  #this is the scope that I'm having trouble with:
  scope :user_replied_group_discussions, lambda {|user| replied_by(user) }

  def last_reply
    if self.comments.any?
      self.comments.last.created_at
    else
      self.created_at
    end
  end
  private
    def self.replied_by(user)
      discussion_ids = %(SELECT commentable_id FROM comments 
                     WHERE commentable_type = 'Discussion' AND user_id = :user_id)
      where("discussable_type = 'Group' AND discussable_id IN (#{discussion_ids}) ", 
           { :user_id => user })
    end
end

# Table name: comments
#
#  id               :integer         not null, primary key
#  content          :text
#  created_at       :datetime
#  updated_at       :datetime
#  commentable_id   :integer
#  commentable_type :string(255)
#  user_id          :integer
#

class Comment < ActiveRecord::Base

  belongs_to :commentable, :polymorphic => true
  belongs_to :user

end

Во всяком случае, я пытался запустить запрос sql в консоли sqlite3, возвращает 0 запись. Спасибо!

1 Ответ

0 голосов
/ 17 апреля 2011

Рассмотрим:

SELECT d.* FROM discussions d
JOIN comments c
ON d.discussable_id = c.commentable_id
WHERE c.commentable_type = 'Discussion'
AND c.user_id = 1

Это показывает те же отношения, что и попытки установить IN. Если это возвращает ноль результатов, ну, это ответ ;-) Возможно, отношения не такие, как ожидалось? (Кажется странным иметь d.discussable_id = c.commentable_id.)

Удачного кодирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...