从今天selectlogging,本周,本月php mysql

我想这是非常简单的,但无法弄清楚。 我试图做几页 – 其中将包含今天,本周和本月从我的MySQL数据库表中select的结果。 logging是使用date('Ymd H:i:s');创build时input的datedate('Ymd H:i:s'); 。 以下是我到目前为止:

date>(date – (60 * 60 * 24))

  "SELECT * FROM jokes WHERE date>(date-(60*60*24)) ORDER BY score DESC" 

周date>(date – (60 * 60 * 24 * 7))

  "SELECT * FROM jokes WHERE date>(date-(60*60*24*7)) ORDER BY score DESC" 

月(30日)其中date>(date – (60 * 60 * 24 * 30))

  "SELECT * FROM jokes WHERE date>(date-(60*60*24*30)) ORDER BY score DESC" 

任何想法将不胜感激。 谢谢!

假设你的date列是一个实际的MySQLdate列:

 SELECT * FROM jokes WHERE date > DATE_SUB(NOW(), INTERVAL 1 DAY) ORDER BY score DESC; SELECT * FROM jokes WHERE date > DATE_SUB(NOW(), INTERVAL 1 WEEK) ORDER BY score DESC; SELECT * FROM jokes WHERE date > DATE_SUB(NOW(), INTERVAL 1 MONTH) ORDER BY score DESC; 

尝试使用date和时间函数(MONTH(),YEAR(),DAY(), MySQL手册 )

本星期:

 SELECT * FROM jokes WHERE WEEKOFYEAR(date)=WEEKOFYEAR(NOW()); 

上个星期:

 SELECT * FROM jokes WHERE WEEKOFYEAR(date)=WEEKOFYEAR(NOW())-1; 

这个月:

 SELECT * FROM jokes WHERE YEAR(date) = YEAR(NOW()) AND MONTH(date)=MONTH(NOW()); 

本周:

 SELECT * FROM jokes WHERE WEEKOFYEAR(date) = WEEKOFYEAR(NOW()); 

当前date:

 SELECT * FROM jokes WHERE YEAR(date) = YEAR(NOW()) AND MONTH(date) = MONTH(NOW()) AND DAY(date) = DAY(NOW()); 

这将只select当前月份,真正的一周,真的只有今天:-)

纳森的回答会给你最近24,168和744小时的笑话,而不是本周这个月的笑话。 如果这就是你想要的,那么很好,但我想你可能正在寻找不同的东西。

用他的代码,中午,你会从中午开始讲笑话,到今天中午才结束。 如果你真的想要今天的笑话,请尝试以下方法:

 SELECT * FROM jokes WHERE date >= CURRENT_DATE() ORDER BY score DESC; 

你将不得不做一些与本周,本月等不同的事情,但你明白了。

每个人似乎都提到date是表中的一列。
我不认为这是很好的做法。 date这个词可能只是一些编码语言(也许是Oracle)中的一个关键字,所以请将列名更改为JDate。
所以下面的工作会更好:

 SELECT * FROM jokes WHERE JDate >= CURRENT_DATE() ORDER BY JScore DESC; 

所以我们有一个名为Jokes的表,列JScore和JDate。

“今天”的更好的解决scheme是:

 SELECT * FROM jokes WHERE DATE(date) = DATE(NOW()) 

Nathan的答案非常接近,但它会返回一个浮点结果集。 随着时间的推移,logging将浮出结果集。 使用NOW()上的DATE()函数将从创build静态结果集的date中去除时间元素。 由于将date()函数应用于now()而不是实际的date列,所以性能应该更高,因为将date()等函数应用于date列会抑制MySql使用索引的能力。

要保持结果集静态使用:

 SELECT * FROM jokes WHERE date > DATE_SUB(DATE(NOW()), INTERVAL 1 DAY) ORDER BY score DESC; SELECT * FROM jokes WHERE date > DATE_SUB(DATE(NOW()), INTERVAL 1 WEEK) ORDER BY score DESC; SELECT * FROM jokes WHERE date > DATE_SUB(DATE(NOW()), INTERVAL 1 MONTH) ORDER BY score DESC; 

那么,这个解决scheme将帮助你只select当前的月份,当前的星期和只有今天

 SELECT * FROM games WHERE games.published_gm = 1 AND YEAR(addedon_gm) = YEAR(NOW()) AND MONTH(addedon_gm) = MONTH(NOW()) AND DAY(addedon_gm) = DAY(NOW()) ORDER BY addedon_gm DESC; 

对于每周添加的post:

 WEEKOFYEAR(addedon_gm) = WEEKOFYEAR(NOW()) 

对于每月添加的post:

 MONTH(addedon_gm) = MONTH(NOW()) 

对于每年添加的post:

 YEAR(addedon_gm) = YEAR(NOW()) 

只显示今天添加的游戏,您将得到准确的结果,否则您可能会显示:“没有今天find新游戏”。 使用ShowIFlogging集是空的事务。

我认为使用NOW()函数是不正确的获取时差。 因为通过NOW()函数每次计算过去的24小时。 您必须改用CURDATE()

  function your_function($time, $your_date) { if ($time == 'today') { $timeSQL = ' Date($your_date)= CURDATE()'; } if ($time == 'week') { $timeSQL = ' YEARWEEK($your_date)= YEARWEEK(CURDATE())'; } if ($time == 'month') { $timeSQL = ' Year($your_date)=Year(CURDATE()) AND Month(`your_date`)= Month(CURDATE())'; } $Sql = "SELECT * FROM jokes WHERE ".$timeSQL return $Result = $this->db->query($Sql)->result_array(); }