Могу ли я сделать это в операторе SQL? - PullRequest
3 голосов
/ 13 сентября 2011

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

*** База данных MySQL

Позвольте мне прояснить вопрос в типичном примере:

Если сегодня 5 постов .... ТОЛЬКО. А вчера было 10 постов.

возврат: 5 сообщений за сегодня и 5 сообщений за вчерашний день

If today have 12 posts....ONLY.
And yesterday have 10 posts. 

return : 12 today posts.

Если сегодня есть 10 сообщений .... ТОЛЬКО. А вчера было 10 постов.

возврат: 10 сообщений за сегодня.

If today have 2 posts....ONLY. yesterday have 5 posts, and the day before yesterday 5posts. 

return : 2 today posts, 5 yesterday posts, 3 the day before yesterday posts.

Ответы [ 3 ]

7 голосов
/ 13 сентября 2011

Вы можете попробовать

select count(*) from post_table
where date = todays_date

и если результат> 10, то

select * from post_table
where date = today's date

еще

select * from post_table  
order by date desc
limit 10
2 голосов
/ 13 сентября 2011

Просто еще одна идея, чуть короче:

set @i = 0;
select *, @i := @i + 1
from post_table
where @i < 10 or date = today
order by date desc;

Не уверен, что это очень эффективно.

Обновление: это быстро! Я тестировал на таком образце:

create table a(i int primary key, d date not null, index idx(d)) 
set @i = 0;

insert into a(i, d)
select @i := @i + 1, adddate(curdate(), interval -(@i % 1000) day) 
from <100 records> a, <100 records> b, <100 records> c
2 голосов
/ 13 сентября 2011

Крошечная разработка решения Jan S (объединяет два условных SELECT в один с параметризованным LIMIT):

SELECT @count := COUNT(*)
FROM post_table
WHERE date = today;

IF @count < 10 SET @count = 10;

SELECT *
FROM post_table
ORDER BY date DESC
LIMIT @count;

UPDATE

Как указано в документации:

Предложение LIMIT может использоваться для ограничения количества строк, возвращаемых оператором SELECT. LIMIT принимает один или два числовых аргумента, которые оба должны быть неотрицательными целочисленными константами, за исключением:

  • В подготовленных выражениях параметры LIMIT могут быть указаны с помощью ? маркеров-заполнителей.

  • В хранимых программах параметры LIMIT могут быть определены с помощью целочисленных стандартных параметров или локальных переменных.

Это означает, что вы можете использовать код, описанный выше, только в хранимой процедуре, а не в простом запросе, который вы выполняете в своем клиентском приложении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...