这样的计算要用group by(分组)来进行,并用sum来求合,重点是要知道MYSQL中的日期函数.
1.WEEKDAY(date)返回星期
2.MONTH(date)返回月份所以语句如下:
星期:
SELECT YEAR(date),DAYOFMONTH(date),WEEKDAY(date),
sum(pv),sum(ip),sum(add)
 FROM webcount group by YEAR(date),DAYOFMONTH(date),WEEKDAY(date)月:
SELECT YEAR(date),DAYOFMONTH(date,
sum(pv),sum(ip),sum(add)
 FROM webcount group by YEAR(date),DAYOFMONTH(date)

解决方案 »

  1.   

    zysoft17(瓷匠)
    感谢你的帮助,按照你所说的。输出的东西好像有点问题,先发我的数据库和写的代码。
    你再看看,有么好方法,你再帮我帖上来,这个问题先留着,
    我大概懂了你所写的SQL语句的意思。我自己也研究一下,如果你有么好消息,通知声。谢!我的数据库导出的SQL
    -- phpMyAdmin SQL Dump
    -- version 2.8.2
    -- http://www.phpmyadmin.net
    -- 
    -- 主机: localhost
    -- 生成日期: 2006 年 08 月 20 日 03:09
    -- 服务器版本: 5.0.22
    -- PHP 版本: 5.1.4
    -- 
    -- 数据库: `webcount`
    -- -- ---------------------------------------------------------- 
    -- 表的结构 `class`
    -- CREATE TABLE `class` (
      `id` int(255) unsigned NOT NULL auto_increment,
      `name` varchar(50) character set utf8 collate utf8_unicode_ci NOT NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;-- 
    -- 导出表中的数据 `class`
    -- INSERT INTO `class` (`id`, `name`) VALUES (1, '人才频道'),
    (2, '第一影院'),
    (4, '房产频道');-- ---------------------------------------------------------- 
    -- 表的结构 `coulist`
    -- CREATE TABLE `coulist` (
      `id` int(255) unsigned NOT NULL auto_increment,
      `class_id` int(255) unsigned NOT NULL,
      `c_pv` int(255) unsigned NOT NULL,
      `c_ip` int(255) unsigned NOT NULL,
      `c_add` int(255) unsigned NOT NULL,
      `c_date` date NOT NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=18 ;-- 
    -- 导出表中的数据 `coulist`
    -- INSERT INTO `coulist` (`id`, `class_id`, `c_pv`, `c_ip`, `c_add`, `c_date`) VALUES (1, 4, 1, 2, 3, '2006-08-20'),
    (2, 2, 1, 2, 3, '2006-08-20'),
    (3, 1, 1, 2, 3, '2006-08-20'),
    (4, 4, 2, 3, 4, '2006-08-21'),
    (5, 2, 2, 3, 4, '2006-08-21'),
    (6, 1, 2, 3, 4, '2006-08-21'),
    (7, 4, 3, 4, 5, '2006-08-22'),
    (8, 2, 3, 4, 5, '2006-08-22'),
    (9, 1, 3, 4, 5, '2006-08-22'),
    (10, 4, 5, 6, 7, '2006-08-28'),
    (11, 2, 5, 6, 7, '2006-08-28'),
    (12, 1, 7, 8, 9, '2006-08-28'),
    (13, 4, 7, 8, 9, '2006-09-28'),
    (14, 2, 7, 8, 9, '2006-09-28'),
    (15, 4, 7, 8, 9, '2006-09-29'),
    (16, 2, 7, 8, 9, '2006-09-29'),
    (17, 1, 7, 8, 9, '2006-09-29');
    文件top.php
    <a href="listclass.php?action=day" target="mainFrame">按日显示</a> <a href="listclass.php?action=week" target="mainFrame">按周显示</a> <a href="listclass.php?action=month" target="mainFrame">按月显示</a>文件listclass.php
    <?
    $action=$_GET['action'];
    include("conn.php");
    //SQL语句
    $sql="select * from class order by id desc";
    //执行SQL语句
    $result=mysql_query($sql);
    ?>
    </p>
    <table width="335" height="52" border="0" align="center" cellpadding="0" cellspacing="0">
      <tr>
        <td align="center" height="25">分类名</td>
      </tr>
    <?
    //循环输出记录
    while($row=mysql_fetch_row($result))
    {
    ?>
      <tr>
        <td align="center" height="25"><a href="listcou.php?class_id=<?=$row[0]?>&action=<?=$action?>"><?=$row[1]?></a></td>
      </tr>
    <?
    }
    mysql_free_result($result);
    mysql_close($conn);
    ?>
    </table>
    文件listcou.php
    <?
    $class_id=$_GET['class_id'];
    $action=$_GET['action'];
    include("conn.php");
    //显示列表///////////////////////////////////////////////////////
    $class_id=$_GET['class_id'];
    //SQL语句
    if ($action=="day")
    {
    $sql="select * from coulist where class_id = '$class_id' order by id desc";
    }
    elseif ($action=="month")
    {
    $sql="SELECT YEAR(c_date),DAYOFMONTH(c_date),sum(c_pv),sum(c_ip),sum(c_add) FROM coulist where class_id = '$class_id' group by YEAR(c_date),DAYOFMONTH(c_date)";
    }
    elseif ($action=="week")
    {
    $sql="SELECT YEAR(c_date),DAYOFMONTH(c_date),WEEKDAY(c_date),sum(c_pv),sum(c_ip),sum(c_add) FROM coulist where class_id = '$class_id' group by YEAR(c_date),DAYOFMONTH(c_date),WEEKDAY(c_date)";
    }//执行SQL语句
    $result=mysql_query($sql);
    ?>
    <table width="450" height="43" border="0" align="center" cellpadding="0" cellspacing="0">
      <tr>
        <td align="center">PV</td>
        <td align="center">IP</td>
        <td align="center">ADD</td>
        <td align="center">DATE</td>
        <td align="center">DEL</td>
      </tr>
    <?
    /*
    //循环输出记录
    while($row=mysql_fetch_row($result))
    {
    ?>
      <tr>
        <td height="25" align="center"><?=$row[2]?></td>
        <td align="center"><?=$row[3]?></td>
        <td align="center"><?=$row[4]?></td>
        <td align="center"><?=$row[5]?></td>
        <td align="center"><a href="delcou.php?del_id=<?=$row[0]?>&class_id=<?=$class_id?>">DEL</a></td>
      </tr>
    <?
    }
    mysql_free_result($result);
    mysql_close($conn);
    */
    while($row=mysql_fetch_row($result))
    {
    print_r($row);
    }
    mysql_free_result($result);
    ?>
      

  2.   

    就是要返回 周 月 各字段的和返回值 例
    第一周 PV和 IP和 
    第二周 PV和 IP和
    第三周......2006年一月 PV和 IP和 
    2006年二月 PV和 IP和
    2006年三月......像这样输出这样的SQL结果,没错吧
    while($row=mysql_fetch_row($result))
    {
    print_r($row);
    }
    mysql_free_result($result);
      

  3.   

    1.我给你的SQL代码应该是正确的,我不知道你是想求每个月中每一周的和还是求所有的一周,二周...的和.
    我给你的代码是第一种,如果要求第二种,就改成:
    SELECT WEEKDAY(date),
    sum(pv),sum(ip),sum(add)
     FROM webcount group by WEEKDAY(date)2.觉得:print_r($row);最好改成:echo $row[0] . $row[1] . $row[2];试试!
      

  4.   

    呵呵,问题已经搞定了!感谢 ZYSOFT17 ,
    翻了一下MYSQL手册,我的SQL语句是SELECT YEAR( c_date ) , MONTH( c_date ) , sum( c_pv ) , sum( c_ip ) , sum( c_add )FROM coulist WHERE class_id =1 GROUP BY YEAR( c_date ) , MONTH( c_date ) 
    SELECT YEAR( c_date ) , week( c_date ) , sum( c_pv ) , sum( c_ip ) , sum( c_add ) 
    FROM coulist WHERE class_id =1 GROUP BY YEAR( c_date ) , week( c_date )