是一个问答的模块,有两个职业,砖家和提问者,规则是,一个砖家可为多人解答,但是一个提问者只可以求教一个砖家。
现在要求考核这个砖家,与他的提问者之间的交互怎么样交互表字段:
`talkid`,`listenid`,`talkname`,`talkjob`,`content`,`pubtime`要求查出下面的值:
砖家姓名 提问者姓名 开始日期 砖家发言次数 提问者发言次数
砖家1          提问者1  2013.4.1        5              4
砖家1          提问者2  2013.4.1        6              8
砖家1          提问者3  2013.4.1        6              8
砖家2          提问者4  2013.4.1        6              8求这条sql语句,谢谢。

解决方案 »

  1.   

    交互表字段:
    `talkid`,`listenid`,`talkname`,`talkjob`,`content`,`pubtime`
    分别是指,说话人id,收听id,说话人名字,说话人职业,1为专家,0为提问者,内容,发布时间。
    就是专家和提问者发布的信息都在这个表,只是用职业和id区分了。
      

  2.   

    select talkid,listenid,min(pubtime) as `开始日期`,count(*) as `砖家发言次数`,
    (select count(*) from 交互表  where talkjob=0 and   talkid=t.listenid and listenid = t.talkid) as 提问者发言次数
    from 交互表 t
    where talkjob=1
    group  by talkid, listenid
      

  3.   

       建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
       参考一下这个贴子的提问方式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)
       
       这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
      

  4.   

    CREATE TABLE `consult` (
      `id` int(8) NOT NULL AUTO_INCREMENT,
      `talkid` int(8) NOT NULL,
      `listenid` int(8) NOT NULL,
      `talkname` varchar(16) NOT NULL,
      `talkjob` tinyint(1) NOT NULL,
      `type` tinyint(1) NOT NULL,
      `content` varchar(255) DEFAULT NULL,
      `filepath` varchar(128) DEFAULT NULL,
      `timeline` varchar(8) DEFAULT NULL,
      `isread` tinyint(1) NOT NULL DEFAULT '0',
      `pubtime` varchar(20) NOT NULL,
      `last_modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8;/*Data for the table `consult` */insert  into `consult`(`id`,`talkid`,`listenid`,`talkname`,`talkjob`,`type`,`content`,`filepath`,`timeline`,`isread`,`pubtime`,`last_modified`) values (1,1,1,'小二',0,0,'咨询点事','','1:20',1,'2013-06-25 11:06:14','2013-07-03 10:31:31'),(2,1,1,'砖家一',1,0,'回答咨询','','1:50',1,'2013-06-25 11:06:15','2013-07-03 10:31:32'),(3,1,1,'砖家一',1,0,'给小二说的第二句话','','1:50',1,'2013-06-25 15:05:02','2013-07-03 10:32:13'),(4,1,1,'小二',0,1,'123',NULL,NULL,0,'2013-06-27 15:05:02','2013-07-03 10:32:14'),(5,1,1,'小二',0,1,'牙疼怎么办呀',NULL,NULL,0,'2013-06-27 15:05:02','2013-07-03 10:32:15'),(6,2,1,'小三',0,1,'牙疼怎么办呀',NULL,NULL,0,'2013-07-01 01:27:46','2013-07-03 10:32:17'),(7,3,1,'小四',0,2,NULL,'','1:20',0,'2013-07-01 01:34:48','2013-07-03 10:32:20');要得到:
    砖家姓名    提问者姓名    开始日期           砖家发言次数 提问者发言次数
    砖家1          小二     2013-06-25 11:06:14        2              3
    砖家1          小三     2013-07-01 01:27:46        0              1
    砖家1          小四     2013-07-01 01:34:48         0            1
      

  5.   


    SELECT talkname,MIN(pubtime) AS `timestart`,COUNT(*) AS con1,
        (SELECT COUNT(*) FROM consult  WHERE talkjob=0 AND   talkid=t.listenid AND listenid = t.talkid) AS con2
    FROM consult t
    WHERE talkjob=1
    GROUP  BY talkid, listenid
    按版主的提示,已经能查一个砖家和其对应的第一个提问者信息了,我再看看;另个谢谢版本的提示,之前我确实没表过清楚,以后会注意的。