2013-03-29 40 views
5

Tôi khá mới mẻ với Rails và có kinh nghiệm cận biên với các ngôn ngữ kiểu SQL.Cách sử dụng WHERE IN trong Rails 3 bằng cách sử dụng MySQL 2?

Tôi đang làm việc trên một dự án 3 Rails sử dụng một MySQL2

tôi có ở đây một câu lệnh SQL generic mà tôi muốn làm việc trên cả hai cơ sở dữ liệu của chúng tôi. Có cách nào để thực hiện điều này thông qua chức năng ActiveRecord không?

SELECT * FROM MyRecords 
WHERE (f1, f2, f3, f4) IN (
    SELECT f1, f2, f3, f4 
    FROM MyRecords 
    GROUP BY f1, f2, f3, f4 
    HAVING count(*) = 1 
); 

Nói cách khác, tôi đang cố gắng để thực hiện một "WHERE IN" tuyên bố (và để được thẳng thắn, tôi thậm chí không biết những gì một nơi mà trong tuyên bố không có gì, chỉ là câu trả lời này làm những gì tôi cần: ? làm thế nào để (hoặc có thể I) SELECT DISTINCT trên nhiều cột (postgresql)) để cụ thể hơn, tôi phải tăng thêm chức năng ActiveRecord sau để nó làm các truy vấn trên:

def MyRecordFunction 
    MyRecords.where('org_id=?', self.org_id).order('f4') 
    end 

Cảm ơn bạn.

+0

Một mệnh đề MySQL IN chỉ đơn giản là OR bao hàm. EG: Ở đây, IN ('1', '2', '3') cũng giống như làm. WHERE this = '1' HOẶC this = '2' HOẶC this = '3' http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_in – fyrye

Trả lời

0

Hãy thử điều này:

MyRecord.joins("JOIN 
    (
    SELECT f1, f2, f3, f4 
    FROM my_records 
    GROUP BY f1, f2, f3, f4 
    HAVING count(*) = 1 
) a ON a.f1 = my_records.f1 AND 
     a.f2 = my_records.f2 AND 
     a.f3 = my_records.f3 AND 
     a.f4 = my_records.f4") 
27

Tôi là một chút bối rối, nhưng tôi nghĩ rằng đây là những gì bạn đang tìm kiếm:

MyRecord.where(:org_id => [1, 2, 3]).order('f4') 

Các trong tuyên bố bên trong của nơi nhìn cho cụ thể các giá trị cho trường nhất định, trong ví dụ trên, truy vấn sẽ tìm kiếm thanh ghi trong bảng mY_records nơi org_id chứa 1,2 hoặc 3.

Kiểm tra này ra: http://guides.rubyonrails.org/active_record_querying.html

Cập nhật: Tôi hiểu, Harish Shetty có quan điểm.

Các vấn đề liên quan