每日报价发电机超过1年

时间:2015-07-04 21:46:05

标签: mysql

亲爱的stackoverflow会员, 我构建了一个报价数据库,报价数量迅速增加。

Sofar,因为我的报价编号是< 366,通过使用以下mysql查询,我能够显示一年中的每一天的独特引用:     SELECT id,language,quote,owner FROM quote_of_the_day     其中id = dayofyear(now())

与此同时,我的报价数据库已超过450报价,我希望每个剩余报价都显示,即使明年已开始。 应该是这样的     计数(*)< 366那么id = dayofyear(now()     ELSE id = dayofyear(now()+ 365

但我无法让它发挥作用。任何建议都非常感谢。

3 个答案:

答案 0 :(得分:0)

首先使用一年中的某一天作为标识符可能不是最好的主意。您希望将架构更改为使用日期而不是一年中的几天作为或至少使其成为复合ID(年份+一年中的一天)。

同时,您可以通过以下方式在WHERE子句中使用条件

SELECT *
  FROM quotes 
 WHERE id = CASE 
           WHEN (SELECT MAX(id) max_id FROM quotes) < 366
               THEN DAYOFYEAR(NOW())
           ELSE DAYOFYEAR(NOW()) + 365 
       END

将一直工作到年底。请在此之前找时间进行适当的架构更改。

这是 SQLFiddle 演示

答案 1 :(得分:0)

感谢所有贡献者。下面提到的MYSQL查询完全符合我的要求:每天下一个引用列表,当列表结束时,而不是第二天nr。将挑选该名单的1个引用等。

SELECT id, language, quote, owner FROM quote_of_the_day
WHERE id=1+`datediff`(curdate(),'2012-12-01') mod (select count(*)
FROM quote_of_the_day)

答案 2 :(得分:-1)

我建议您使用#include <iostream> struct A; struct B; void f(A a); void f(B b); struct common_interface { virtual void thisf() = 0; }; template<class Host, class Base> struct common_interface_impl : Base { virtual void thisf() { f(static_cast<Host&>(*this)); } }; struct A : common_interface_impl<A, common_interface> { int i; A(): i(0) {}; }; struct B: common_interface_impl <B, A> { int j; B(): j(1) {}; }; void f(A a) { std::cout << a.i << std::endl; } void f(B b) { std::cout << b.i << " " << b.j << std::endl; } int main() { A a; B b; a.thisf(); b.thisf(); return 0; } 字段而不是依赖ID - 如果您删除某些记录或在某天添加多个引号,它们可能会混乱。然后你可以使用一个普通的timestamp子句:

WHERE

希望这有帮助。