是一个问答的模块,有两个职业,砖家和提问者,规则是,一个砖家可为多人解答,但是一个提问者只可以求教一个砖家。
现在要求考核这个砖家,与他的提问者之间的交互怎么样交互表字段:
`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语句,谢谢。
现在要求考核这个砖家,与他的提问者之间的交互怎么样交互表字段:
`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语句,谢谢。
`talkid`,`listenid`,`talkname`,`talkjob`,`content`,`pubtime`
分别是指,说话人id,收听id,说话人名字,说话人职业,1为专家,0为提问者,内容,发布时间。
就是专家和提问者发布的信息都在这个表,只是用职业和id区分了。
(select count(*) from 交互表 where talkjob=0 and talkid=t.listenid and listenid = t.talkid) as 提问者发言次数
from 交互表 t
where talkjob=1
group by talkid, listenid
参考一下这个贴子的提问方式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)
这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
`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
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
按版主的提示,已经能查一个砖家和其对应的第一个提问者信息了,我再看看;另个谢谢版本的提示,之前我确实没表过清楚,以后会注意的。