MySQL 查询疑问?
问题描述
现在有一下三张表:
A:文章表B:评论表C:用户表
需要达到一下要求:
随机抽出三篇文章,要求输出内容中包括文章的发表用户,发表时间,文章标题,评论数量
已知:
文章标题,发表时间字段为:title,create_time,在文章表topic_list中,表中uid为public_user的id发表用户,字段为nickname,在用户表public_user中评论表为:topic_comment,其中tid为topic_list的id
需要用一个sql语句来完成,下面是我写出的,除了评论数量意外,都完成了:
select tl.id,tl.title,tl.create_time,pu.nickname from topic_list as tl left join public_user as pu on tl.uid=pu.id where tid=$tid order by rand() limit 3
想问下各位大神,怎么在这段sql的基础上,达到查询结果中有每篇文章的评论数量结果?
问题解答
回答1:不建议在SQL中rand,可以先random好id(不过你可能不知道id的范围=w=)
知道tid的情况下,可以用下面的SQL一句完成,你也可以按自己需要再修改~
SELECT `t`.`title`, `t`.`create_time`, `u`.`nickname`, COUNT(`c`.`id`)FROM `topic_list` AS `t`LEFT JOIN `public_user` AS `u` ON `t`.`uid`=`u`.`id`LEFT JOIN `topic_comment` AS `c` ON `c`.`tid`=`t`.`id`WHERE `t`.`id` IN ($tid1, $tid2, $tid3)GROUP BY `t`.`id`;回答2:
连接评论表 根据文章id分组 计算条数就行了
回答3:为什么要基于一句sql?如果一句是为了少写代码,无可厚非;如果是一句为了性能,na那么这种 sql 既难维护、难理解而且也没有所谓的性能提升,极力推荐使用主键查询。很简单,先把文章随机出来,其他的表用索引或者主键会更快:`$rand = random(1, 100) / 100;$sql = ’SELECT FROM table WHERE id >= (SELECT FLOOR( MAX(id) ’.$rand.’) FROM table ) ORDER BY id LIMIT 1;’;`
回答4:select tl.id,tl.title,tl.create_time,pu.nickname,count(tb.comment) from topic_list as t1 join public_user as pu on tl.uid=pu.id join topic_comment as tb on t1.id = tb.tidwhere tid=$tid order by rand() limit 3
相关文章:
1. html5 - 请问一下写H5的时候 你们都是兼容那些手机2. node.js - npm安装模块时,在cmd上显示的是一条白线,白线前面是一天反斜线转圈圈,然后就出现npm ERR错误了,求帮助,谢谢3. android - java tm platform se binary 占用很多内存4. java - Spring MVC 映射请求问题5. javascript - Vue $refs 为什么无法获取组件对象6. php - 注册验证邮箱失效后操作问题7. mysql自动提交的问题8. python 函数名之后 有一个箭头 这是什么作用?9. java - 做一个视频播放器,想实现一个功能,如果3秒不点击屏幕任何,则下方一个界面布局(显示按钮那些的)自动消失。10. clone - git sourceTree克隆仓库时,都不停弹出Password Required弹窗,即时输入正确的git账号密码还是弹出

网公网安备