2

我有一个名为价格的单个 mysql 表,用于存储从和到的日期,如下所示:

id    from          to              price
1     2013-11-25    2014-01-08      55

用户选择一个月和一年,我希望它显示来自或到该月的所有结果,因此如果用户选择 2013 年 11 月、2013 年 12 月或 2014 年 1 月,它将包括上述行。

id    from          to              price
2     2013-10-25    2013-11-07      100

如果他们选择 2013 年 10 月或 11 月,它将显示上面的行,因为它从 10 月开始到 11 月结束。

我试过了

SELECT * FROM `prices`
WHERE MONTH(prices.from)<={$_SESSION['month']}
AND MONTH(prices.to)>={$_SESSION['month']}
AND YEAR(prices.to)={$_SESSION['year']}
ORDER BY prices.from ASC

这不起作用我不确定如何做到这一点

4

3 回答 3

1

您可以使用STR_TO_DATE从用户选择的月份和年份创建日期,然后使用DATE_FORMAT将表格的日期列以 YYYY-MM 格式放置,并将两者与用户插入的 YYYY-MM 进行比较。

我不精通 php,但这里有一个 sql 示例(你可以在 str_to_date 中使用任何一天,因为你会忽略它):

SELECT * FROM `prices`
WHERE DATE_FORMAT(prices.`from`,"%Y-%m") <= 
   DATE_FORMAT(STR_TO_DATE('01,10,2013','%d,%m,%Y'),"%Y-%m")
AND DATE_FORMAT(prices.`to`,"%Y-%m") >= 
   DATE_FORMAT(STR_TO_DATE('01,10,2013','%d,%m,%Y'),"%Y-%m")
ORDER BY prices.`from` ASC

sqlfiddle demo

于 2013-11-09T18:24:50.720 回答
0

尝试改用“BETWEEN”。例子:

SELECT * FROM `prices` WHERE MONTH(`from`) BETWEEN '10' AND '12' AND YEAR(`to`)='2013'
于 2013-11-09T17:58:44.063 回答
0

按照这个方法:

SELECT * from prices
WHERE str_to_date('{$_SESSION['month']}-{$_SESSION['year']}','%b-%Y') BETWEEN date(prices.from) AND date(prices.to)

您可能只想在 str_to_date 中使用正确的格式,目前它转换以下格式 = Oct-2013

检查其他格式:http ://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_str-to-date

于 2013-11-09T18:27:49.257 回答