如何使用给定值“推进”记录?

我正在使用Ruby on Rails 3.2.9和MySQL。 我有一个带有user_id属性的Article模型(此属性表示外键 – 用于关联作者用户的id ),我想检索为给定作者“订购”的文章。 也就是说,鉴于我有以下记录:

      ...  

当我查找为id 1user_id = 1 )的作者订购的文章时,应该按照以下顺序对退回的文章进行排序:

      ...  

换句话说,我希望检索所有文章,但是使用这个“优先级”进行排序由给定作者创建的文章首先返回,然后是所有其他文章 (也就是说,我想“推进”由鉴于作者)。

我该怎么做?


注意 :我正在寻找Ruby on Rails实现,可能通过order方法。

你的例子不是那么清楚,因为你正在搜索user_id 1,而user_id的正常排序无论如何都会把它们放在第一位。 我相信你的意思是做一些像:

 SELECT id, title, user_id FROM myTable ORDER BY CASE WHEN user_id = @search_id THEN 1 ELSE 2 END, user_id 

在上面的示例中, @search_id应为1。

尝试:

 Article.where(user_id: 1).order("user_id ASC").order("id ASC") 

或这个:

 Article.where(user_id: 1).order("user_id ASC, id ASC") 

试试这个 ::

 Select * from myTable order by user_id, id 

对于给定的user_id:

 Select * from myTable where user_id='?' order by user_id, id 

Rails中的查询可能是这样的:

 Article.order(Article.send(:sanitize_sql, ["IF(user_id = ?, 1, 2)", params[:user_id]])) 

IF(user_id = ?, 1, 2)为订购商品返回1或2。 sanitize_sql是一个私有方法,用于清理参数。

如果params [:user_id]始终是一个整数,则查询可以简化为:

 Article.order("IF(user_id = #{params[:user_id].to_i}, 1, 2)")