0

我有一张这样的桌子

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查询,请指教!

问候

4

6 回答 6

1

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

SELECT * 
  FROM table1
 WHERE date BETWEEN CURDATE() + INTERVAL 0 - WEEKDAY(CURDATE()) DAY
                AND CURDATE() + INTERVAL 6 - WEEKDAY(CURDATE()) DAY

此查询将获取date列位于当前日历周(从星期一到星期日)边界内的行。

WEEKDAY()函数 返回日期的工作日索引(0 = 星期一,1 = 星期二,... 6 = 星期日)。表达方式

CURDATE() + INTERVAL 0 - WEEKDAY(CURDATE()) DAY

返回当前日历周的星期一的日期,并且

CURDATE() + INTERVAL 6 - WEEKDAY(CURDATE()) DAY

返回当前日历周的星期日的日期。使用BETWEENinWHERE子句可确保查询仅返回date值介于这两个日期(周一至周日)之间的行。

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

今天日期(2013 年 9 月 19 日)的示例输出:

+--------+------------+----------------+
| 编号 | 日期 | 内容 |
+--------+------------+----------------+
| 1 | 2013-09-16 | 内容 1 这里 |
+--------+------------+----------------+

更新:要获取上一个日历周的记录,您只需从两个值中减去 1 周间隔BETWEEN

SELECT * 
  FROM table1
 WHERE date 
   BETWEEN CURDATE() + INTERVAL 0 - WEEKDAY(CURDATE()) DAY - INTERVAL 1 WEEK,
       AND CURDATE() + INTERVAL 6 - WEEKDAY(CURDATE()) DAY - INTERVAL 1 WEEK
于 2013-09-19T19:10:45.077 回答
0

试试这个

SELECT * FROM table WHERE date BETWEEN '09-16-2013' AND '09-22-2013';
于 2013-09-19T18:51:12.287 回答
0

关键字是WEEK()

SELECT id,date, CONCAT('content ',WEEK(date),' to here') as content  FROM table_name
于 2013-09-19T18:52:09.323 回答
0
SELECT * 
FROM table
WHERE date BETWEEN '9/16/2013 00:00:00.00' AND '9/22/2013 00:00:00.00'
于 2013-09-19T18:52:32.840 回答
0

要动态选择它,请尝试类似

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

或吨

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

sqlfiddle 示例 - http://sqlfiddle.com/#!2/62982/4

于 2013-09-19T18:59:13.540 回答
0

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

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

在此处查看工作演示

于 2013-09-19T19:05:04.353 回答