[英]Ruby on Rails: order records with null value
User.where(id: users_ids)
.joins('LEFT JOIN names ON names.user_id = users.id AND names.primary = 1')
.joins('LEFT JOIN emails ON emails.user_id = users.id AND emails.primary = 1')
.select('users.*, names.first_name AS f_name , emails.email AS primary_email')
I need to order records by f_name
. 我需要按f_name
排序记录。 When f_name
is nil
then records are moved to the end and ordered by email. 当f_name
为nil
记录将移至末尾并通过电子邮件进行排序。
Below is the query, 下面是查询,
User.where(id: users_ids)
.joins('LEFT JOIN names ON names.user_id = users.id AND names.primary = 1')
.joins('LEFT JOIN emails ON emails.user_id = users.id AND emails.primary = 1')
.select('users.*, names.first_name AS f_name , emails.email AS primary_email')
.where('names.first_name IS NOT NULL')
.order('f_name asc').union(
User.where(id: users_ids)
.joins('LEFT JOIN names ON names.user_id = users.id AND names.primary = 1')
.joins('LEFT JOIN emails ON emails.user_id = users.id AND emails.primary = 1')
.select('users.*, names.first_name AS f_name , emails.email AS primary_email')
.where('names.first_name IS NULL')
.order('primary_email asc'))
The above query don't work. 上面的查询不起作用。
Database - MySql 数据库-MySql
I resolved this issue by bad way, but resolved 我用不好的方法解决了这个问题,但是解决了
users_with_names = User.where(id: users_ids)
.joins('LEFT JOIN names ON names.user_id = users.id AND names.primary = 1')
.joins('LEFT JOIN emails ON emails.user_id = users.id AND emails.primary = 1')
.select('users.*, names.first_name AS f_name , emails.email AS user_email')
.where('names.first_name IS NOT NULL')
.order('f_name asc')
users_without_names = User.where(id: users_ids)
.joins('LEFT JOIN names ON names.user_id = users.id AND names.primary = 1')
.joins('LEFT JOIN emails ON emails.user_id = users.id AND emails.primary = 1')
.select('users.*, names.first_name AS f_name , emails.email AS user_email')
.where('names.first_name IS NULL')
.order('user_email asc')
@contacts = [users_with_names, users_without_names].flatten.paginate(page: params[:page], per_page: 10)
This issue is resolved in this way 此问题已通过这种方式解决
joins('LEFT JOIN names ON names.user_id = users.id AND names.primary = 1')
.joins('LEFT JOIN emails ON emails.user_id = users.id AND emails.primary = 1')
.select('users.*, names.first_name AS f_name , emails.email AS user_email,
names.last_name AS l_name, names.middle_name AS m_name, ISNULL(names.first_name) AS name_present')
.order('name_present, f_name ASC, emails.email ASC')
.group('users.id')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.