表A  
字段:fid,titlefid,title
1   张三
1   王五
1   张四
1   张二
1   王四
3   张三发布
4   王五发布
5   张三发布
6   张三发布2fid=1的title是姓名,不等于1的title是信息且包含发布人的姓名,如何用SQL列出各个人的发布数量递减排序

解决方案 »

  1.   

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

  2.   

    MySQL 
    create table test1
    (fid,title)
    insert into test1 select '1','张三'
    insert into test1 select '1','王五'
    insert into test1 select '1','王四'
    insert into test1 select '2','信息X王四发布'
    insert into test1 select '3','信息X王五发布'
    insert into test1 select '4','信息XX王五'
    insert into test1 select '3','信息XX王四发布'
    insert into test1 select '3','信息XXX王四发布'
    insert into test1 select '1','XXX张三发布'
    /*
    要得到这样的排行报表:
    name count
    王四 3
    王五 2
    张三 1
    */
      

  3.   

    MySQL  
    create table test1
    (fid,title)
    insert into test1 select '1','张三'
    insert into test1 select '1','王五'
    insert into test1 select '1','王四'
    insert into test1 select '2','信息X王四发布'
    insert into test1 select '3','信息X王五发布'
    insert into test1 select '4','信息XX王五'
    insert into test1 select '3','信息XX王四发布'
    insert into test1 select '3','信息XXX王四发布'
    insert into test1 select '4','XXX张三发布'
    /*
    要得到这样的排行报表:
    name count
    王四 3
    王五 2
    张三 1
    */
      

  4.   

    SELECT a.title,COUNT(*) FROM test1a a INNER JOIN test1a b  ON INSTR(b.title,a.title )>0 AND LENGTH(b.title)>LENGTH(a.title)
    GROUP BY a.title ORDER BY COUNT(a.title) desc
      

  5.   

    select a.title as name,
    (select count(*) from test1 where instr(title,a.title) and fid!=1) as `count`
    from (select title from test1 where fid=1) a但是会不可以避免以下这种错误,会造成统计重复。张三
    张三丰或者王五
    张王五
      

  6.   

    加上排序
    select a.title as name,
        (select count(*) from test1 where instr(title,a.title) and fid!=1) as `count`
    from (select title from test1 where fid=1) a
    order by 2 desc