table表中有一个字段starttime,时间格式形如:2009-09-18 10:15:16
现在想统计任意一年中的一个月数据,并按一个月中的天数统计记录数,$date 是php中定义的变量,格式形如:2009-09-18
我现在按照一个月的天数进行统计,可是mysql不支持YEAR中带变量的参数,如果写成YEAR('2009-09-18')就能正确执行,但是$date是从表单中获取的数据,它是实时更新的,请问这个问题该怎么实现?
SELECT DATE_FORMAT( starttime, '%d' ) AS day , count(*) AS num
FROM table
where YEAR($date)=YEAR(starttime)
AND MONTH($date)=MONTH(starttime)
GROUP BY day
14 个解决方案
#1
检查一下你的参数格式,mysql应该是支持YEAR()函数中用变量的。
#2
你的这个语句应该就可以啊? 这条语句有什么问题吗?
#3
YEAR($date)
==>> YEAR(2009-09-18)
需要加上引号 生成 YEAR('2009-09-18')
==>> YEAR(2009-09-18)
需要加上引号 生成 YEAR('2009-09-18')
#4
mysql> set @a='2009/08/07';
Query OK, 0 rows affected (0.00 sec)
mysql> select year(@a);
+----------+
| year(@a) |
+----------+
| 2009 |
+----------+
1 row in set (0.00 sec)
定义变量 或者在mysql中写个参数函数
不是很明白你的需求
#5
谢谢各位的回答!这是php网页设计的一部分,我的数据表中starttime记录了好几年的记录,我现在想随意查询某一年中某个月的记录数,比如查询2008年12月份的记录,$date获取值就为'2008-12-**',**可以为1到31之间,然后再按12份中每天的记录数进行统计,最终通过图表显示,奇怪的是,我调试的时候,发现执行sql语句后,一条记录也获取不到,YEAR($date)改为YEAR('2008-12-05') 就可以,但这不是我想要的,因为要查询的日期随时都是变化的啊
#6
因为你如果只是 YEAR($date) 最终你的SQL语句是 YEAR(2009-09-18) 这并不是正确的msyql日期格式,需要加上引号。形成 YEAR('2009-09-18') , PHP 中怎么把引号加上,建议你看一下PHP的手册。
#7
year(\'$date\')
#8
改成year(\'$date\')直接提示语法错误,不行啊
#9
PHP 的建议你到PHP版去问一下。问题主要在你没有往MYSQL送这对单引号
#10
我这样写代码没有错误哦!可以查询出符合条件的数据来。
mysql> select * from d;
+---------------------+
| d |
+---------------------+
| 2009-07-05 15:20:10 |
| 2009-07-14 10:30:00 |
| 2009-04-20 05:15:40 |
+---------------------+
3 rows in set (0.00 sec)
<?php
$conn = mysql_connect("localhost","root","");
mysql_select_db("csdn",$conn);
$year = "2009-05-12";
$sql = "select * from d where year(d)=year('$year')";
echo $sql;
mysql_query("set names gbk",$conn);
$result = mysql_query($sql,$conn);
while($row = mysql_fetch_array($result)){
echo $row[0];
}
?>
#11
多谢各位的帮忙,我已经解决了,主要问题还是出在mysql怎样获取php变量的问题,因为这是在php程序中查询,改成一下就可以了:
mysql_query("
SELECT DATE_FORMAT( starttime, '%d' ) AS day , count(*) AS num
FROM table
where YEAR('".$date."')=YEAR(starttime)
AND MONTH('".$date."')=MONTH(starttime)
GROUP BY day
")
看起来这个YEAR括号里还真是花哨啊!哈哈!有单引号、双引号、还要带点
mysql_query("
SELECT DATE_FORMAT( starttime, '%d' ) AS day , count(*) AS num
FROM table
where YEAR('".$date."')=YEAR(starttime)
AND MONTH('".$date."')=MONTH(starttime)
GROUP BY day
")
看起来这个YEAR括号里还真是花哨啊!哈哈!有单引号、双引号、还要带点
#12
多谢Kevin Garnett,我的格式基本和你一样,可是我的却要这么复杂,不知道问什么,我的year('$year')会出错,要用year('".$year."')才行,是不是双引号里面套用双引号会出错啊
#13
双引号套双引号肯定会出错的,你可以外面一层双引号,里面一层单引号。
#14
恩,又长见识了
这里好人真是多啊!真是不知道怎么感谢!
这里好人真是多啊!真是不知道怎么感谢!
#1
检查一下你的参数格式,mysql应该是支持YEAR()函数中用变量的。
#2
你的这个语句应该就可以啊? 这条语句有什么问题吗?
#3
YEAR($date)
==>> YEAR(2009-09-18)
需要加上引号 生成 YEAR('2009-09-18')
==>> YEAR(2009-09-18)
需要加上引号 生成 YEAR('2009-09-18')
#4
mysql> set @a='2009/08/07';
Query OK, 0 rows affected (0.00 sec)
mysql> select year(@a);
+----------+
| year(@a) |
+----------+
| 2009 |
+----------+
1 row in set (0.00 sec)
定义变量 或者在mysql中写个参数函数
不是很明白你的需求
#5
谢谢各位的回答!这是php网页设计的一部分,我的数据表中starttime记录了好几年的记录,我现在想随意查询某一年中某个月的记录数,比如查询2008年12月份的记录,$date获取值就为'2008-12-**',**可以为1到31之间,然后再按12份中每天的记录数进行统计,最终通过图表显示,奇怪的是,我调试的时候,发现执行sql语句后,一条记录也获取不到,YEAR($date)改为YEAR('2008-12-05') 就可以,但这不是我想要的,因为要查询的日期随时都是变化的啊
#6
因为你如果只是 YEAR($date) 最终你的SQL语句是 YEAR(2009-09-18) 这并不是正确的msyql日期格式,需要加上引号。形成 YEAR('2009-09-18') , PHP 中怎么把引号加上,建议你看一下PHP的手册。
#7
year(\'$date\')
#8
改成year(\'$date\')直接提示语法错误,不行啊
#9
PHP 的建议你到PHP版去问一下。问题主要在你没有往MYSQL送这对单引号
#10
我这样写代码没有错误哦!可以查询出符合条件的数据来。
mysql> select * from d;
+---------------------+
| d |
+---------------------+
| 2009-07-05 15:20:10 |
| 2009-07-14 10:30:00 |
| 2009-04-20 05:15:40 |
+---------------------+
3 rows in set (0.00 sec)
<?php
$conn = mysql_connect("localhost","root","");
mysql_select_db("csdn",$conn);
$year = "2009-05-12";
$sql = "select * from d where year(d)=year('$year')";
echo $sql;
mysql_query("set names gbk",$conn);
$result = mysql_query($sql,$conn);
while($row = mysql_fetch_array($result)){
echo $row[0];
}
?>
#11
多谢各位的帮忙,我已经解决了,主要问题还是出在mysql怎样获取php变量的问题,因为这是在php程序中查询,改成一下就可以了:
mysql_query("
SELECT DATE_FORMAT( starttime, '%d' ) AS day , count(*) AS num
FROM table
where YEAR('".$date."')=YEAR(starttime)
AND MONTH('".$date."')=MONTH(starttime)
GROUP BY day
")
看起来这个YEAR括号里还真是花哨啊!哈哈!有单引号、双引号、还要带点
mysql_query("
SELECT DATE_FORMAT( starttime, '%d' ) AS day , count(*) AS num
FROM table
where YEAR('".$date."')=YEAR(starttime)
AND MONTH('".$date."')=MONTH(starttime)
GROUP BY day
")
看起来这个YEAR括号里还真是花哨啊!哈哈!有单引号、双引号、还要带点
#12
多谢Kevin Garnett,我的格式基本和你一样,可是我的却要这么复杂,不知道问什么,我的year('$year')会出错,要用year('".$year."')才行,是不是双引号里面套用双引号会出错啊
#13
双引号套双引号肯定会出错的,你可以外面一层双引号,里面一层单引号。
#14
恩,又长见识了
这里好人真是多啊!真是不知道怎么感谢!
这里好人真是多啊!真是不知道怎么感谢!