从今天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(); }