Есть ли способ сжать эти запросы до одного запроса?
Я запрашиваю 1 таблицу для 4 атрибутов: author_id
, status
, category_id
и site_id
.Цель состоит в том, чтобы я хотел найти самую последнюю запись в каждом случае (причина заключается в увеличении счетчиков для отчетов):
# 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 запросов.Я делаю это в рельсах, поэтому цель состоит в том, чтобы получить 9 Post
моделей из одного Post.all(:conditions => x)
вызова, после чего я могу отфильтровать их в коде ruby.Это возможно?Какой лучший подход здесь?
Обновление
Вот примерный код, который я использую для генерации этих запросов:
https://gist.github.com/965233