数据表checkwork
userid     startdate     enddate     re
1         2011-11-01    2011-11-03   请假
1         2011-11-25    2011-11-26   因公外出
2         2011-11-04    2011-11-06   节假日我现在需要查出11月份,userid为1的人的,“请假”的天数并显示出来,怎么实现啊??sql语句怎么写??...

解决方案 »

  1.   

    SELECT COUNT(`re`) AS 'Total'  FROM `checkwork` WHERE `Userid`=1 GROUP BY `re`;
      

  2.   

    select count(*) from checkwork where datediff(day,'2011-11-01',startdate)>=0 and datediff(day,enddate,'2011-11-30')>=0 and userid=1 and re='请假'
      

  3.   

    啊啊,前辈我描述错了
    我是想要把11月中的某一天作为查询条件,startdate为开始日期,enddate为结束日期
    我想得到是如下这样的效果,这应该怎么写啊??我已经通过循环得到了每天的日期,主要是如何把它作为查询条件放到sql语句里啊????
    用户id 1
    2011-11-01 请假
    2011-11-02 请假
    2011-11-03 请假
    2011-11-04 
    2011-11-05
    2011-11-06
    2011-11-07
    ....
    2011-11-24
    2011-11-25 因公外出
    2011-11-26 因公外出
    2011-11-27
      

  4.   

    上面2楼那条SQL应该可以了吧? 日期直接比较就行了,当然有必要的话可以用MYSQL 自带的日期函数来取得具体的时间进行比较
      

  5.   

    2楼那个不行啊,我用的是access数据库啊..
    我每次循环只能得到一个日期
    我现在就是搞不明白,我应该怎么用这一个日期和数据库里面的进行比较,如果符合的话(即在startdate和enddate之间)然后才显示re里的内容啊...
      

  6.   

    2楼那个不行啊,我用的是access数据库啊..
    我每次循环只能得到一个日期
    我现在就是搞不明白,我应该怎么用这一个日期和数据库里面的进行比较,如果符合的话(即在startdate和enddate之间)然后才显示re里的内容啊...
      

  7.   

    按你这个好像是查id1一整个月的出勤情况
    这种显示方式基本没有办法有用sql一句出来的(似乎需要建临时表等方法除外)
    你的方法倒也是可以实现的(就是不是很科学)
    比如你要查2011-11-01 id1的出勤情况:
    select * from checkwork where userid='1' and startdate<='2011-11-01' and enddate>='2011-11-01'
      

  8.   

    access数据库呀,这个我不了解不能乱说...
      

  9.   

    其实应该是一样的吧??,只是不能用mysql自带的那些函数了....我真愁死了,这个access数据库是个考勤机里的,还没有注释。您看,还有别的办法吗
      

  10.   

    你就是要查userid(比如1)的考勤记录对吧
    查出来的记录显示为:
    2011-11-01 请假
    2011-11-02 请假
    2011-11-03 请假
    2011-11-04  
    2011-11-05
    2011-11-06
    2011-11-07
    ....
    2011-11-24
    2011-11-25 因公外出
    2011-11-26 因公外出
    2011-11-27对吗
      

  11.   


    <?php
    $startime="2011-11-11";//指定开始日期
    $endtime="2011-12-02";//指定结束日期
    Checkwork($startime,$endtime);
    function Checkwork($startime,$endtime){
    while($startime<=$endtime){
    //===================================
    //这段是取$remak的值,没有access环境测试,你自己改一下吧!主要目的是取出时间段内$remak的值
    $sql="select * from checkwork where userid='1' and startdate<='$startime' and enddate>='$startime'";
    $rs = $conn->Execute($sql);
    $remak=$rs->Fields['remak']->Value;
    //=================================
    echo $startime."-------".$remak."<br>";//读出日期与备注字段
        $startime=date('Y-m-d',strtotime($startime)+86400);
        }
    }
    ?>
      

  12.   

    再给一个比较直观(把sql那段注销掉)的,希望能帮到你,这个应该算伪代码<?php
    $startime="2011-11-11";//指定开始日期
    $endtime="2011-12-02";//指定结束日期
    Checkwork($startime,$endtime);
    function Checkwork($startime,$endtime){
    while($startime<=$endtime){
    /*
     * 按上面的sql语句提取出$reamk的值
     * $sql="select * from checkwork where userid='1' and startdate<='$startime' and enddate>='$startime'";
     * $rs = $conn->Execute($sql);
     * $remak=$rs->Fields['remak']->Value;
     */
    echo $startime."-------备注".$remak."<br>";//读出日期与备注字段
        $startime=date('Y-m-d',strtotime($startime)+86400);
        }
    }
    ?>