我想在一个月内选择所有记录。 例如: 在datebase中的记录是 日期
关于我,我只想选择2014年8月1日至2014年8月14日。 我把查询写成
$result = mysql_query("SELECT t1.qty, t2.lastname, t2.firstname, t2.date, t3.name, t2.reservation_id, t2.payable FROM prodinventory AS t1
INNER JOIN reservation AS t2
ON t1.confirmation=t2.confirmation
INNER JOIN products AS t3
ON t1.room=t3.id
WHERE t2.date BETWEEN '$start' AND date'$end'
GROUP BY t2.confirmation") or die(mysql_error());
我得到了结果 日期
它包括9月份的日期。请帮忙。
答案 0 :(得分:3)
使用str_to_date函数,如下所示:
SELECT t1.qty,
t2.lastname,
t2.firstname,
t2.date,
t3.name,
t2.reservation_id,
t2.payable
FROM prodinventory AS t1
INNER JOIN reservation AS t2
ON t1.confirmation = t2.confirmation
INNER JOIN products AS t3
ON t1.room = t3.id
WHERE str_to_date(t2.date, '%d/%m/%Y') BETWEEN
str_to_date('$start', '%d/%m/%Y') AND
str_to_date('$end', '%d/%m/%Y')
我也摆脱了你的GROUP BY子句。您只能将GROUP BY子句与聚合函数结合使用。您没有使用任何聚合函数。
当然,理想的做法是修改表以实际保存日期,而不是字符串。这样你就可以在不必转换的情况下进行查询。您还可以直接索引日期列,而不必创建基于函数的索引。
答案 1 :(得分:2)
WHERE t2.date BETWEEN '$start' AND date'$end'
这date'$end'
看起来不太好。修理它。您的t2.date
字段是什么类型的?
更新:如果您只需要月份信息,那么您可以使用具有LIKE'%/ 08/2014'条件的varchar字段。另一种方法是使用STR_TO_DATE(str,fmt),你的条件就是
STR_TO_DATE(t2.date,'%d/%m/%Y') BETWEEN STR_TO_DATE('$start','%d/%m/%Y') AND STR_TO_DATE('$end','%d/%m/%Y')
答案 2 :(得分:2)
如果t2.date的类型是datetime,则查询看起来像这样
WHERE(t2.date BETWEEN' 2014-08-01 00:00:00' AND' 2014-09-01 00:00:00&#39)
如果t2.date的类型是varchar或text,则查询看起来像这样,
在CAST之间(' 2014-08-01' AS DATE)和CAST(' 2014-09-01' 日期);
答案 3 :(得分:1)
一个简单的解决方案是使用LIKE运算符。
LIKE'%/ 08/2014'
例如:
$result = mysql_query("SELECT t1.qty, t2.lastname, t2.firstname, t2.date, t3.name, t2.reservation_id, t2.payable FROM prodinventory AS t1
INNER JOIN reservation AS t2
ON t1.confirmation=t2.confirmation
INNER JOIN products AS t3
ON t1.room=t3.id
WHERE t2.date LIKE '%/08/2014'
GROUP BY t2.confirmation") or die(mysql_error());
如果您没有更改MYSql配置,则日期格式应为YYYY-MM-DD 所以它会成为
LIKE'2014-08 - %'
希望它有所帮助!
快乐编码!!!
答案 4 :(得分:1)
如果" t2.date"这对我有用。字段是TIMESTAMP:
"... WHERE DATE(t2.date) BETWEEN '{$start}' AND '{$end}' "