【问题标题】:MySQL Select Week Range From DatabaseMySQL 从数据库中选择周范围
【发布时间】:2013-02-01 15:20:33
【问题描述】:

在我的数据库中,我存储周数和相关年份。例如这样的:

id | week | year | text
---+------+------+-----------
 1 |  23  | 2012 | hello
 2 |  27  | 2012 | something
 3 |  39  | 2012 | more text
 4 |  43  | 2012 | more text

然后在前端,用户可以选择一周和一年,然后我希望能够返回该范围之间的所有记录。例如,在 25 - 2012 周和第 50 - 2012 周之间选择将返回最后 3 条记录。

我不确定是否也保留一周的第一个日期并搜索它是否会更容易,或者是否有一种方法可以轻松地搜索几周。

提前致谢。

【问题讨论】:

  • ... WHERE (year = 2012) AND (week BETWEEN 25 AND 50)。但是,如果您允许查询范围跨越不同年份,则将不起作用。

标签: mysql sql week-number


【解决方案1】:

您可能希望连续几周,即使年份不同。为此,一些算术会有所帮助:

select text
from dates
where year*100 + week between $weekmin+$yearmin*100 and $weekmax+$yearmax*100 

这会将 2012 年的第 7 周转换为“201207”以进行比较。

【讨论】:

  • 哇,比我想象的要容易。为此 +1 :)
  • @palindrom 。 . .是的。接得好。看来我在途中的某个地方删除了它。
  • 一百万年我都不会想到这一点。非常非常聪明并且完美地工作。非常感谢。
【解决方案2】:

既然 MySQL 支持comparison operators,这个任务真的很简单:

SELECT text FROM `dates` WHERE week>=$weekmin AND week<=$weekmax AND year>=$yearmin AND year<=$yearmax ORDER BY year DESC, month DESC

【讨论】:

  • 感谢您的回复,但我需要能够跨越多年,这是我遇到的问题,无法解决。
  • 啊,是的,我第一次没想到。我需要一分钟来解决这个问题。但是使用 DATE 或 UNIX 时间戳而不是两个整数可以避免这个问题。
【解决方案3】:
SELECT * 
FROM yourtable
WHERE week >= User_input1_week
AND week <= User_input2_week
AND year >= User_input1_year
AND year <= user_input2_year

这可能会奏效。

我不确定是否也保留第一次约会会更容易 这周也可以搜索,或者是否有办法搜索 几个星期轻松。

为您的列使用 DATE 类型可能会更好。

【讨论】:

    猜你喜欢
    • 2014-12-13
    • 1970-01-01
    • 2016-04-09
    • 1970-01-01
    • 2016-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-17
    相关资源
    最近更新 更多