MySQL 查询疑问?

发布于 2022-09-04 11:29:50 字数 562 浏览 38 评论 0

现在有一下三张表:

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的基础上,达到查询结果中有每篇文章的评论数量结果?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

待天淡蓝洁白时 2022-09-11 11:29:50

不建议在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`;
汹涌人海 2022-09-11 11:29:50

连接评论表 根据文章id分组 计算条数就行了

贱人配狗天长地久 2022-09-11 11:29:50

为什么要基于一句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;';
`

梦太阳 2022-09-11 11:29:50
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.tid
where tid=$tid order by rand() limit 3
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文