이러한 쿼리를 하나의 쿼리로 압축 할 수있는 방법이 있습니까? author_id
, status
, category_id
및 site_id
:Rails에서 속성 조합 쿼리 - 9 개의 쿼리를 1로 만드는 방법은 무엇입니까?
나는 4 개 속성에 대한 1 개 테이블을 쿼리하고있다. 목표는 각 사례별로 가장 최근의 레코드를 찾고 싶습니다 (이유는보고를 위해 카운터를 늘리는 것입니다).
# author_id
SELECT * FROM posts WHERE posts.author_id = 10 ORDER BY created_at desc LIMIT 1
# author_id + status
SELECT * FROM posts WHERE posts.author_id = 10 AND posts.status = 'draft' ORDER BY created_at desc LIMIT 1
SELECT * FROM posts WHERE posts.author_id = 10 AND posts.status = 'published' ORDER BY created_at desc LIMIT 1
# author_id + site_id
SELECT * FROM posts WHERE posts.author_id = 10 AND posts.site_id = 1 ORDER BY created_at desc LIMIT 1
# author_id + status + site_id
SELECT * FROM posts WHERE posts.author_id = 10 AND posts.status = 'draft' AND posts.site_id = 1 ORDER BY created_at desc LIMIT 1
SELECT * FROM posts WHERE posts.author_id = 10 AND posts.status = 'published' AND posts.site_id = 1 ORDER BY created_at desc LIMIT 1
# author_id + site_id + category_id
SELECT * FROM posts WHERE posts.author_id = 10 AND posts.site_id = 1 AND posts.category_id = 7 ORDER BY created_at desc LIMIT 1
# author_id + status + site_id + category_id
SELECT * FROM posts WHERE posts.author_id = 10 AND posts.status = 'draft' AND posts.site_id = 1 AND posts.category_id = 7 ORDER BY created_at desc LIMIT 1
SELECT * FROM posts WHERE posts.author_id = 10 AND posts.status = 'published' AND posts.site_id = 1 AND posts.category_id = 7 ORDER BY created_at desc LIMIT 1
9 개의 쿼리입니다. 나는 레일에서 이것을하고 있기 때문에, 목표는 하나의 Post.all(:conditions => x)
호출에서 9 Post
모델을 가지고있을 것이고, 나는 루비 코드에서 그것들을 걸러 낼 수있다. 이것이 가능한가? 가장 좋은 방법은 무엇입니까? 는 SQL 측에서
https://gist.github.com/965233
이 모든 SQL 호출을 생성하는 루비를 게시 할 수 있습니까? – jaredonline
하나의 SQL 문에서 필요로하는 이유가 있습니까? 나는 결과 SQL이 추리가 될 것이라고 확신한다. –
은 [이 요지] (https://gist.github.com/965233)에 대한 링크로 업데이트되어 그 db 호출을 생성하는 루비 코드를 보여준다. –