本帖最后由 uczone 于 2009-11-09 19:08:56 编辑

解决方案 »

  1.   

    回 WWWWA:您好,谢谢您的回复,会有您所提到的3,4,N个作者的情况的,如果因此而不能统计的话,限定它最多为2个作者也可以
      

  2.   

    表的结构为:
    id(int),=【自动编号】
    title(varchar),=【标题】
    writer(varchar),=【作者】
    content(longtext)=【内容】数据列表如下:
    我现用的统计语句如下:
    $dsql->Query("Select writer,count(id) as cc From `content` group by writer order by count(writer) desc limit 0,10");
    按该语句得到的排名结果如下:
    现老师要求,精确到小数后一位数,不知道可不可以实现?即显示的结果如下:
    望赐教
      

  3.   

    是否能用一句SQL可以搞定,这个就没细想了
    但有一点可以肯定:用存储过程肯定可以处理。
      

  4.   

    字段writer有2种情况,一种是包含“,”的,一种是没有的
    没有的可以直接累加,有的话要则个循环判断,如:
    instr(writer,',')>0
      

  5.   

    回8楼vinsonshen师傅不管投稿作者有多少位,该作者前后都加了,这个符号作分隔如:ID        Title                    Writer
    ----------------------------------------------------
    1      abc                        ,张三,
    2      cded                       ,张三,李四,
    3      kosoi                      ,张三,李四,王五,
      

  6.   

    基本思路是将WRITER字段拆分,以,为分界符,SQL语句比较复杂,需要临时表,如有3-N个作者,
    分数1/3-1/n ?
      

  7.   

    照您所说?我理解成:
    【content】
    id             title              writer
    ------------------------------------------------
    1      abc                        ,writer.id[1], 
    2      cded                       ,writer.id[1],writer.id[2], 
    3      kosoi                      ,writer.id[1],writer.id[2],writer.id[3],【writer】
    id           name
    -----------------------------------
    1            张三
    2            李四
    3            王五是这样吗? 如果作者不好整除,直接每位作者各占一篇也行
      

  8.   

    ID        Title                    Writer 
    1      abc                        ,张三, 
    2      cded                      ,张三, 
    2      cded                      李四, 
    3      kosoi                      ,张三,
    3      kosoi                       李四, 
    3      kosoi                       王五去掉,号
      

  9.   

    按ID、TITLE分组,根据COUNT(*)就得出来,你的表不符合3NF
      

  10.   

    这怎么会是冗余呢!你这种设计第一范式都不满足,所以SQL难写。
      

  11.   

    wwwwa 兄台能给我大概的举个例吗?
      

  12.   

    文章表:(文章id,名称...)
    作者记录表:(序号id,文章id,作者名)
      

  13.   

    ID    Title          Writer
    ----------------------------------------------------
    1    abc            ,张三,
    2    cded             ,张三,李四,
    3    kosoi            ,张三,李四,王五,基于这个测试记录,你的结果是什么?你期望显示什么?建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果
      

  14.   

    回:ACMAIN_CHM 我的想法已经在1楼和5楼表述了
      

  15.   

    ID    Title          Writer 
    ---------------------------------------------------- 
    1    abc            ,张三, 
    2    cded            ,张三,李四, 
    3    kosoi            ,张三,李四,王五, 也就是以上面为例的话,统计出每位作者所发表的文章数,精确到小数后一位数,不四舍五入计算
    想得到的结果如下:发表排名信息
    张三  1.8篇
    李四  0.8篇
    王五  0.3篇
      

  16.   

    $dsql->SetQuery("Select writer,count(id) as cc From `#@__content` group by writer order by count(writer) desc limit 0,10");

    $dsql->Execute('pm');
    $word = '';
    while($row=$dsql->GetArray('pm')){
    $word .= "<li><span>({$row[cc]})</span><a href='/paiming.php#{$row[writer]}' target='_blank'>{$row[writer]}</a></li>";
    }
    return $word;
    我的MYSQL查询语句如上
      

  17.   

    mysql> select * from t_uczone;
    +------+-------+------------------+
    | id   | Title | Writer           |
    +------+-------+------------------+
    |    1 | abc   | ,张三,           |
    |    2 | cded  | ,张三,李四,      |
    |    3 | kosoi | ,张三,李四,王五, |
    +------+-------+------------------+
    3 rows in set (0.00 sec)mysql> select FLOOR(sum(1/(length(Writer)-length(replace(Writer,',',''))-1))*10)
    /10 as Cnt
        -> from t_uczone
        -> where Writer like '%,张三,%';
    +--------+
    | Cnt    |
    +--------+
    | 1.8000 |
    +--------+
    1 row in set (0.00 sec)mysql>
    mysql> select FLOOR(sum(1/(length(Writer)-length(replace(Writer,',',''))-1))*10)
    /10 as Cnt
        -> from t_uczone
        -> where Writer like '%,李四,%';
    +--------+
    | Cnt    |
    +--------+
    | 0.8000 |
    +--------+
    1 row in set (0.00 sec)mysql>
    mysql> select FLOOR(sum(1/(length(Writer)-length(replace(Writer,',',''))-1))*10)
    /10 as Cnt
        -> from t_uczone
        -> where Writer like '%,王五,%';
    +--------+
    | Cnt    |
    +--------+
    | 0.3000 |
    +--------+
    1 row in set (0.00 sec)mysql>
      

  18.   

    发表排名信息
    张三  1.8篇
    李四  0.8篇
    王五  0.3篇
    如果没有另外一张作者表张三
    李四
    王五则想直接生成你的结构比较麻烦,需要遍历所有记录的 Writer  并拆分出你的作者。这个需要用存储过程,或者在你的程序中实现了。
    如果你有这么个表,则可以直接做JOIN查询,