Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 基于日期的Mysql查询?_Php_Mysql - Fatal编程技术网

Php 基于日期的Mysql查询?

Php 基于日期的Mysql查询?,php,mysql,Php,Mysql,我有一张这样的桌子 id | date | content 1 | 09-16-2013 | content 1 here 2 | 09-23-2013 | content 2 here 3 | 09-30-2013 | content 3 here 我想从那个日期开始显示一周的内容。例如,第一个内容应该从2013年9月16日开始,然后显示到2013年9月22日午夜。然后在第二天,它变为内容2。 同样,当我在内容2上时,我想显示“前一周内容”,然后只显示前一周的内容..我想我可以通过检

我有一张这样的桌子

id | date | content
1  | 09-16-2013 | content 1 here
2  | 09-23-2013 | content 2 here 
3  | 09-30-2013 | content 3 here
我想从那个日期开始显示一周的内容。例如,第一个内容应该从2013年9月16日开始,然后显示到2013年9月22日午夜。然后在第二天,它变为内容2。 同样,当我在内容2上时,我想显示“前一周内容”,然后只显示前一周的内容..我想我可以通过检查当前日期,然后检查下面必须显示的任何内容来做到这一点

我不太擅长这种mysql查询,请指教

问候

试试这个

SELECT * FROM table WHERE date BETWEEN '09-16-2013' AND '09-22-2013';
关键词是


要动态选择它,请尝试以下操作

SELECT * FROM `yourTable` WHERE NOW() >= STR_TO_DATE(`date`, '%m-%d-%Y') ORDER BY STR_TO_DATE(`date`, '%m-%d-%Y') DESC LIMIT 1
或t


SQLFIDLE示例-

您可以根据需要替换周偏移量

SET @weekOffset = +2;
SELECT * FROM test
WHERE WEEK(`date`) = WEEK(NOW()) + @weekOffset;

看一个正在运行的演示

我想你正在寻找这样的东西

选择*
来自表1
其中日期介于CURDATE()和间隔0之间-工作日(CURDATE())天
和CURDATE()+间隔6-工作日(CURDATE())天
此查询将获取
date
列位于当前日历周(从周一到周日)边界内的行

函数返回日期的工作日索引(0=周一,1=周二,…6=周日)。表情

CURDATE() + INTERVAL 0 - WEEKDAY(CURDATE()) DAY
返回当前日历周的星期一的日期,以及

CURDATE() + INTERVAL 6 - WEEKDAY(CURDATE()) DAY
返回当前日历周的星期日的日期。 在
WHERE
子句中使用
BETWEEN
,确保查询只返回值介于这两个日期(周一到周日)之间的
date

注意:确保在
date
列上有索引。此查询是索引友好的

今日(2013年9月19日)的样本输出:


从哪个日期算起一周,当前日期?在MySQL中使用
week()
函数。是的,如果表中有今天的日期,则从该日期算起一周。我无法在查询中获得该日期。这类似于一周的引号,所以MySQL表中的所有记录都是每周的…例如,每周一我都会有一个新的报价,所以从那个日期到1周都需要显示相同的内容。我想这就是我需要的!我会检查一下,然后回来投票!你能补充一下这个查询的工作原理吗?谢谢@peterm!我将检查它与几个记录和测试它。再次感谢@杰伊:非常欢迎:)请参阅更新的答案以获得一些解释。谢谢!这很有帮助。最后一个问题。对于我的问题,我想在哪里显示前一周的内容,我应该只操纵中间条件吗?例如,下周一,我应该展示本周的内容。同样,从现在起3周后,我应该在“上一周”部分下显示过去两周以及当前一周的内容。此外,如果从这些查询中删除
LIMIT 1
,它将在同一查询中返回所有以前的“内容”。您还可以将其更改为
限制2
,以仅获取当前和前一周的数据-
SET @weekOffset = +2;
SELECT * FROM test
WHERE WEEK(`date`) = WEEK(NOW()) + @weekOffset;
CURDATE() + INTERVAL 0 - WEEKDAY(CURDATE()) DAY
CURDATE() + INTERVAL 6 - WEEKDAY(CURDATE()) DAY
+------+------------+----------------+ | id | date | content | +------+------------+----------------+ | 1 | 2013-09-16 | content 1 here | +------+------------+----------------+