2013-03-05 2 views
3

У меня есть база данных, содержащая кавычки. Мне нравится отображать случайные кавычки. Но с двумя условиями.Как увеличить вероятность того, что выбрана старая цитата

  • Котировки, отображаемые на прошлой неделе, не должны выбираться.
  • Чем дальше в прошлом отображается цитата, тем больше шансов ее выбрать.

Первое не так сложно. Для этого я могу использовать предложение WHERE.

Второе, что я не знаю, как реализовать. Есть ли простой способ сделать это, или мне нужно определить сложную функцию для этого?

Одно расширение, которое также может быть приятным. Сначала большинство кавычек не будут отображаться. Если бы можно было дать цитату, которая еще не была отображена, гораздо больше шансов быть отображенной, тогда было бы неплохо.

+1

Whcih DMBS вы используете? – araknoid

+0

В этом случае H2 (http://www.h2database.com/), но я также использую MySQL и SQLite, например. Поэтому я предпочитаю решение, которое применимо в целом. –

ответ

3

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

Вот псевдокод:

select quote from quotes 
    where current date - display date > 1 week 
    order by ((current date - display date - 1 week) * random number) desc 
    fetch first row only 

Вам придется адаптировать его к функциям даты/времени вашей системы, так как они весьма разнообразны.

Возможно, вам понадобится промежуточный шаг для применения случайного числа к каждой строке, потому что прямое упорядочение на rand() не работает во многих системах.

Обновление: Адрес a working MySQL example.

+0

Выглядит бросить интересно. Я вникаю в это. –

+0

@CecilWesterhof, я сделал рабочий пример. См. Обновление. – 2013-03-05 13:49:55

+0

Что перевести в H2 в: http://pastebin.com/7sjSCaFe Единственная странная вещь, что «давно, давно» выбирается гораздо чаще, как и следовало ожидать. В SQLFiddle и моем тестировании H2. По тем или иным причинам в моем комментарии не работают строки. :-( –

Смежные вопросы