开发环境:php+mysql
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 

解决方案 »

  1.   

    检查一下你的参数格式,mysql应该是支持YEAR()函数中用变量的。
      

  2.   

    YEAR($date)
    ==>>  YEAR(2009-09-18)
    需要加上引号 生成 YEAR('2009-09-18') 
      

  3.   

    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中写个参数函数
    不是很明白你的需求
      

  4.   

    谢谢各位的回答!这是php网页设计的一部分,我的数据表中starttime记录了好几年的记录,我现在想随意查询某一年中某个月的记录数,比如查询2008年12月份的记录,$date获取值就为'2008-12-**',**可以为1到31之间,然后再按12份中每天的记录数进行统计,最终通过图表显示,奇怪的是,我调试的时候,发现执行sql语句后,一条记录也获取不到,YEAR($date)改为YEAR('2008-12-05') 就可以,但这不是我想要的,因为要查询的日期随时都是变化的啊
      

  5.   


    因为你如果只是  YEAR($date) 最终你的SQL语句是 YEAR(2009-09-18) 这并不是正确的msyql日期格式,需要加上引号。形成  YEAR('2009-09-18')  , PHP 中怎么把引号加上,建议你看一下PHP的手册。
      

  6.   

    改成year(\'$date\')直接提示语法错误,不行啊
      

  7.   

    PHP 的建议你到PHP版去问一下。问题主要在你没有往MYSQL送这对单引号
      

  8.   

    我这样写代码没有错误哦!可以查询出符合条件的数据来。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];
    }
    ?>
      

  9.   

    多谢各位的帮忙,我已经解决了,主要问题还是出在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括号里还真是花哨啊!哈哈!有单引号、双引号、还要带点
      

  10.   

    多谢Kevin Garnett,我的格式基本和你一样,可是我的却要这么复杂,不知道问什么,我的year('$year')会出错,要用year('".$year."')才行,是不是双引号里面套用双引号会出错啊