我有一个名为price的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
这不起作用我不知道如何做到这一点
答案 0 :(得分: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
答案 1 :(得分:0)
尝试使用“BETWEEN”代替。 例如:
SELECT * FROM `prices` WHERE MONTH(`from`) BETWEEN '10' AND '12' AND YEAR(`to`)='2013'
答案 2 :(得分: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中使用正确的格式,目前它转换以下格式= 2013年10月
选中此格式以获取其他格式:http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_str-to-date