Вопрос по SQL или Ruby on Rails: ограничьте результаты поиска более чем двумя условиями - PullRequest
0 голосов
/ 05 марта 2010

Можно ли навязать условия в SQL-запросе большему из двух условий?

Например, представьте себе сайт с постами. Есть ли способ запросить сообщения, чтобы результат гарантированно содержал как минимум все сообщения, сделанные за последние 24 часа, так и не менее 10 сообщений, но не превышал ли это излишне любой из них?

Т.е., если он уже имеет все сообщения, сделанные за последние 24 часа, но не 10 сообщений, он продолжит добавлять сообщения, пока не достигнет 10, или если он уже имеет 10 сообщений, но не все сообщения, сделанные за последние 24 часа. часов, он будет продолжаться до тех пор, пока не охватит последние 24 часа, но он никогда не будет содержать как сообщения 25 часов назад, так и более 10 сообщений.

Редактировать: В ответ на запрос опубликовать мою модель. Я не совсем уверен, как разместить модель, так как мои модели созданы Rails. Однако, короче говоря, у публикации есть строка date_at create_at, и на ней есть индекс.

Ответы [ 2 ]

1 голос
/ 05 марта 2010

Я думаю, LIMIT требует константы, но если у вас есть индекс в поле created, вытащить несколько записей с одного конца будет довольно эффективно, верно? Что-то вроде (в псевдокоде SQL-ish):

select * from posts
where created > min(one_day_ago,
                    (select created from posts
                     order by created desc
                     limit 1 offset 10));
0 голосов
/ 05 марта 2010

Вероятно, самое ясное решение - сделать выбор, который возвращает самые последние 10, другой выбор, который возвращает все за последний день, и использовать объединение этих двух выборов.

Один из этих объединенных селекторов всегда будет полностью содержать другой, поэтому он может быть не самым эффективным, но я думаю, что это то, что я бы сделал.

...