1.网页预览
咨询员姓名-昨日预约(2013-07-22)-昨日到诊(2013-07-22)-本月预约(单位:人)-本月到诊(单位:人)
这些字段都在一个表内:(z_hzmanage)表:
我现在登录主管理员用户了,进入系统首页,我要让他显示,每个用户成员,昨日预约多少人(统计一下),昨日到诊多少人(统计一下),本月预约多少人(统计一下),本月到诊多少人(统计一下)。下面是我写的:
<?php
$yesterday=date("Y-m-d",strtotime("-1 day"));
$sql="select distinct z_username,count(*) as aa,z_username from z_hzmanage where z_yydate='$yesterday' group by z_class";
 $query=mysql_query($sql);
 $num=mysql_num_rows($query);
?>page页面
<table width="100%" align="center" border="0" cellspacing="0" cellpadding="0" class="table_boder03 mar_top10">
  <tr>
    <th width="15%">咨询员姓名</th>
    <th width="18%">昨日预约(<?php echo $yesterday; ?>)</th>
    <th width="17%">昨日到诊(<?php echo $yesterday; ?>)</th>
    <th width="18%">本月预约(单位:人)</th>
    <th width="20%">本月到诊(单位:人)</th>
 </tr>
 <?php while($row=mysql_fetch_array($query)){?>  
  <tr>
    <td><?php echo $row['z_username'];?></td>
    <td><a href="#">(<?php echo $row['aa'];?>人)</a></td>
    <td></td>
    <td></td>
    <td></td>
  </tr> 
<?php }?>   
</table>这样写只能查询昨天预约的统计人数,我现想让昨日到诊的、本月预约的、本月到诊的都显示出来。该怎么写啊,可把我给难住了,菜鸟,不太懂啊!请各位帮帮忙,感激不尽!。
MySQLSQL

解决方案 »

  1.   

       建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
       参考一下这个贴子的提问方式http://bbs.csdn.net/topics/320211382
       
       1. 你的 create table xxx .. 语句
       2. 你的 insert into xxx ... 语句
       3. 结果是什么样,(并给以简单的算法描述)
       4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
       
       这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
      

  2.   

    (mysql)表:z_hzmanage 如下:
    创建表;
    CREATE TABLE `z_hzmanage` (
      `z_id` int(11) NOT NULL auto_increment,
      `z_yyh` varchar(25) default NULL,
      `z_uname` varchar(10) NOT NULL,
      `z_sex` int(10) unsigned NOT NULL default '0',
      `z_age` varchar(10) default '0',
      `z_area` int(15) unsigned NOT NULL default '0',
      `z_tel` varchar(15) default NULL,
      `z_jzbz1` varchar(25) default NULL,
      `z_jzbz2` varchar(25) default NULL,
      `z_dzdate` varchar(30) default NULL,
      `z_yydate` varchar(30) default NULL,
      `z_isxf` int(5) unsigned NOT NULL default '0',
      `z_source` int(10) unsigned NOT NULL default '0',
      `z_isfbz` int(10) unsigned NOT NULL default '0',
      `z_iszsl` int(10) unsigned NOT NULL default '0',
      `z_jzys` int(10) unsigned NOT NULL default '0',
      `z_content` text,
      `z_isstate` int(5) unsigned NOT NULL default '0',
      `z_class` int(10) unsigned NOT NULL default '0',
      `z_username` varchar(10) default NULL,
      `z_systemdate` date NOT NULL default '0000-00-00',
      PRIMARY KEY  (`z_id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=43 DEFAULT CHARSET=gbk;插入数据如下:INSERT INTO z_hzmanage VALUES ('20', 'VB004', '张三', '1', '59', '3', '15986598989', '2', null, '2013-07-22', '2013-07-22', '1', '8', '1', '1', '4', '前列腺增生情况', '1', '43', '贾荣暖', '2013-07-07');
    INSERT INTO z_hzmanage VALUES ('22', 'A120', '李想', '1', '25', '27', '13661324126', '13', null, '', '2013-07-25', '0', '2', '0', '0', '0', '尿痛、尿不尽', '0', '46', '于欣', '2013-07-08');
    INSERT INTO z_hzmanage VALUES ('23', 'B08136', '张宏', '2', '23', '3', '13341093286', '13', null, '2013-07-22', '2013-07-22', '0', '2', '0', '0', '0', '不育', '0', '49', '刘宗利', '2013-07-08');
    INSERT INTO z_hzmanage VALUES ('24', 'G0111109', '单国明', '1', '60', '3', '13520360453', '13', null, '2013-07-22', '2013-07-22', '0', '2', '0', '0', '0', '泌尿系统感染 有血尿的情况', '1', '43', '贾荣暖', '2013-07-08');
    INSERT INTO z_hzmanage VALUES ('25', 'X08137', '李传山', '2', '36', '3', '18639376779', '13', null, '', '2013-07-10', '0', '2', '0', '0', '0', '早泄', '0', '49', '刘宗利', '2013-07-08');
    INSERT INTO z_hzmanage VALUES ('26', 'X0111110', '吴晓东', '1', '28', '3', '18301422176', '13', null, '2013-07-22', '2013-07-22', '0', '2', '0', '0', '0', '', '0', '43', '贾荣暖', '2013-07-08');
    INSERT INTO z_hzmanage VALUES ('27', 'G0121110', '董艳秋', '2', '29', '13', '13836838645', '13', null, '', '2013-07-22', '0', '1', '0', '0', '0', '', '0', '43', '贾荣暖', '2013-07-08');
    INSERT INTO z_hzmanage VALUES ('28', 'X08135', '张明心', '1', '24', '3', '13611260617', '13', null, '', '2013-07-08', '0', '2', '0', '0', '0', '', '0', '49', '刘宗利', '2013-07-08');
    INSERT INTO z_hzmanage VALUES ('29', '08134', '高峰', '1', '24', '3', '15719585829', '1', null, '', '2013-07-08', '0', '2', '0', '0', '0', '', '0', '49', '刘宗利', '2013-07-08');
    INSERT INTO z_hzmanage VALUES ('30', 'G0121112', '张旭', '1', '42', '13', '18045933999', '13', null, '', '2013-07-10', '0', '1', '0', '0', '0', '', '0', '43', '贾荣暖', '2013-07-08');
    INSERT INTO z_hzmanage VALUES ('31', 'x08231', '吴友军', '2', '24', '29', '15612351449', '0', '0', '', '2013-07-15', '0', '10', '0', '0', '0', '', '0', '49', '刘宗利', '2013-07-08');
    INSERT INTO z_hzmanage VALUES ('32', 'B012108', '赵言松', '1', '40', '13', '18010030698', '13', null, '', '2013-07-22', '0', '11', '0', '0', '0', '', '0', '43', '贾荣暖', '2013-07-08');
    INSERT INTO z_hzmanage VALUES ('33', 'Q1912 ', '魏有军', '1', '50', '3', '13691092145', '13', null, '2013-07-22', '2013-07-23', '0', '2', '0', '0', '0', '', '0', '52', '岳晶晶', '2013-07-09');
    INSERT INTO z_hzmanage VALUES ('34', 'Q1921', '王宪明', '1', '50', '11', '13832099758', '13', null, '', '2013-07-22', '0', '2', '0', '0', '0', '', '0', '52', '岳晶晶', '2013-07-09');
    INSERT INTO z_hzmanage VALUES ('35', '11', '李海涛', '1', '33', '11', '13930723909', '1', null, '', '', '0', '2', '0', '0', '0', '', '0', '52', '岳晶晶', '2013-07-09');
    INSERT INTO z_hzmanage VALUES ('36', '11', '郝晓飞', '1', '28', '0', '13311129002', '0', null, '', '', '0', '2', '0', '0', '0', '', '0', '52', '岳晶晶', '2013-07-09');
    INSERT INTO z_hzmanage VALUES ('37', 'Q1913', '付晓亮', '1', '30', '0', '13321123651', '咨询', '阴茎短小', '', '', '1', '2', '1', '1', '1', '', '1', '52', '岳晶晶', '2013-07-09');
    INSERT INTO z_hzmanage VALUES ('38', 'J13101', '郝志', '2', '32', '29', '15810203044', '7', null, '', '', '0', '2', '0', '0', '0', '', '0', '50', '赵学广', '2013-07-09');
    INSERT INTO z_hzmanage VALUES ('39', 'J13106', '秦东梅', '2', '32', '3', '18932845983', '13', null, '', '', '0', '2', '0', '0', '0', '', '0', '50', '赵学广', '2013-07-09');
    INSERT INTO z_hzmanage VALUES ('40', 'X13203', '刘镇男', '1', '27', '0', '13038964566', '男性不育', '血精', '', '', '0', '2', '0', '0', '0', '', '0', '50', '赵学广', '2013-07-09');
    INSERT INTO z_hzmanage VALUES ('41', 'ytf123', '王二麻子', '1', '28', '1', '13146577982', '炎症', '精索炎', '', '2013-07-18', '0', '3', '0', '0', '1', '54645', '0', '27', '夏新愿', '2013-07-18');
    INSERT INTO z_hzmanage VALUES ('42', 'mvcphp12', '王二麻子', '1', '27', '2', '13146577982', '复查', '他院术后治疗无效或感染', '', '2013-07-19', '0', '3', '0', '0', '0', '', '0', '52', '岳晶晶', '2013-07-19');z_class(帮定的用户ID)、z_username(用户的姓名)、z_yydate(预约日期)、z_dzdate(到诊日期)我现在想要的工能是,查询每个用户的姓名(姓名不能重复)、然后再查询统计,昨日预约日期、昨日到诊日期、本月预约日期、本月到诊日期的个数例如这样显示:
     
    用户姓名 昨日预约(2013-07-23)  昨日到诊(2013-07-23)  本月预约(单位:人)  本月到诊(单位:人)
    贾荣暖 (6人) (6人) (6人) (6人)
    刘宗利 (5人) (5人) (5人) (5人)
    夏新愿 (1人) (1人) (1人) (1人)
    于欣 (1人) (1人) (1人) (1人)
    岳晶晶 (6人) (6人) (6人) (6人)
    赵学广 (3人) (3人) (3人) (3人)
      

  3.   

    mysql> select z_username,
        ->  sum(if(z_yydate=curdate()-interval 1 day,1,0)) as `昨日预约`,
        ->  sum(if(z_dzdate=curdate()-interval 1 day,1,0)) as `昨日到诊`,
        ->  sum(if(z_yydate>curdate()-interval day(curdate()) day,1,0)) as `本月预约`,
        ->  sum(if(z_dzdate=curdate()-interval day(curdate()) day,1,0)) as `本月到诊`
        -> from z_hzmanage
        -> group by z_username;
    +------------+----------+----------+----------+----------+
    | z_username | 昨日预约 | 昨日到诊 | 本月预约 | 本月到诊 |
    +------------+----------+----------+----------+----------+
    | 刘宗利     |        0 |        0 |        5 |        0 |
    | 夏新愿     |        0 |        0 |        1 |        0 |
    | 岳晶晶     |        1 |        0 |        3 |        0 |
    | 赵学广     |        0 |        0 |        0 |        0 |
    | 于欣       |        0 |        0 |        1 |        0 |
    | 贾荣暖     |        0 |        0 |        6 |        0 |
    +------------+----------+----------+----------+----------+
    6 rows in set, 46 warnings (0.00 sec)mysql>
      

  4.   

     感谢4楼的思路,但是4楼的函数在mysql中是没有的,mysql的时间间隔函数和oracle还是有区别的 SELECT z_username,sum(case when z_yydate=DATE_SUB(curdate(),INTERVAL 1 day) then 1 else 0 end ) 昨日预约,
            sum(case when z_dzdate=DATE_SUB(curdate(),INTERVAL 1 day) then 1 else 0 end)昨日会诊,
            sum(case when z_yydate >= DATE_SUB(curdate(),INTERVAL day(curdate()) day) then 1 else 0 end)本月预约,
            sum(case when z_dzdate >=DATE_SUB(curdate(),INTERVAL day(curdate()) day) then 1 else 0 end)本月会诊 
    from z_hzmanage group by z_username;
    我自己写了个