回答

收藏

Rails中WHERE子句中的ALL运算符

技术问答 技术问答 225 人阅读 | 0 人回复 | 2023-09-12

关联如下所示。! Y4 B1 C6 ^* x4 n, p
InstructorStudent has_many :feesFee belongs_to :instructor_student我想在所有给定的小组中获得每月详细信息的指导。如果其中任何一个不包含每月的详细信息,则不应返回任何记录。
  h6 b9 _( Q  U8 d! p8 H+ @, {+ y/ Kdue_month = ["2017-01-01","2017-02-01",,"2017-03-01"]以下是我尝试过的查询,我想获得InstructorStudent属于所有给定三个Due_month如果任何月份都没有数据,则应返回查询nil:
" `% X2 n& V- s, W/ H8 w9 M@fee_paid = InstructorStudent.first.joins(:fees).where("fees.monthly_detail = ALL(ARRAY[?]::date[]) AND fees.course_type = ?",due_month.map{|i| i },"per month");编辑1:1 d0 u- V, S: [- b
@ erwin-brandstetter这是我的最终查询$ t$ T6 x% e8 F3 }# b
InstructorStudent.where("  instructor_students.Id IN (?)",Instructor.find(17).per_month_active_student).joins(  "INNER JOIN fees ON fees.instructor_student_id = instructor_students.id LEFT OUTER JOIN fee_payment_notifications ON fee_payment_notifications.fee_id = fees.id").where(  "fee_payment_notifications.status  ? AND  fees.monthly_detail = ANY(ARRAY[?]::date[]) AND  fees.course_type = ? AND  fees.payment_status  ?"  ,'Paid',dueMonth,"per month","Due").group(  'fees.instructor_student_id').having(  'count(*) = ?',dueMonth.length)关联:
' \. t7 T, j" @/ A& r# y- `InstructorStudent has_many FeesFee belongs_to instructor_studentFee has_many fee_payment_notificationsFeePaymentNotifications belongs to fee在这里,我为吸引导师做了什么?dueMonth数组中包含fee.monthly_detail内容,还有fee.payment_status和Fees.course_type和fee_payment_notifications不应为已付付费。( {- m0 W; Y9 Q: z8 H( ~
不一定总有fee_payment_notifications。
0 _0 f1 K; x% m因此,如果fee具有fee_payment_notifications,仅检查其状态。如果没有。fee_payment_notifications,如有任何记录,应提取记录。fee_payment_notifications如果状态为已付,则不应获得记录。

+ ?% D2 t' f) `( P8 ~% m                                                               
3 M& F2 H5 z/ p9 J8 i" a    解决方案:
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则