php - 求正确SQL的写法。
阿神
阿神 2017-04-10 17:07:24
[PHP讨论组]

1.问题:我一直不清楚一个SQL算出一个特定结果的写法,想向大神请教

2.代码:

SELECT tb.*,tbc.`comment` 
from blog_tinyblog AS tb,blog_tbcomment AS tbc 
where tb.user_id=tbc.user_id AND                    
tb.num=tbc.now_num
group by tbc.num_tiny_blog

我写的SQL是这样的,结果如图:

可这并不是我想要的结果,我希望去除重复,将comment存储为一个数组,成为只有一条结果的形式,请大神赤脚。也许可能会说用 distinct,但是不行
目的:我想写个微博评论系统 【现在是想显示出每条微博对应的评论】

阿神
阿神

闭关修行中......

全部回复(3)
黄舟

大部分ORM一般有两种方式解决此类问题:

  1. 采用的 Lazy Load 方式,其实原理很简单:就是取两次,第一次取blog,第二次取blog对应的comment,只不过第二次取的操作延迟执行。

  2. 第二种就是题主这种一次查询的方式,只是ORM会根据查询的结果映射成你想要的那种形式(单个Blog对象中包含对应的Comment列表)。

所以综上,如果题主正在使用一种ORM工具,一般都包含这两种方式的处理;如果没有使用任何ORM,那题主需要自己实现一个对应的算法(其实就是一个类似reduce的算法)。

PHP中文网
  1. 我没看懂你的意思。

  2. 你想要做什么。

  3. 首先你这全链接查询一般是没必要的。

  4. 再者没有聚集函数你用分组没有什么意义。

PHP中文网

最佳方案是只获取微博和评论数就行了,具体的评论可以用ajax去取,没必要一次取出来,这样压力比较大。
如果你一定要一次取出来可以考虑group_concat这个函数,具体去查mysql手册,但是不推荐,如果评论很多的话这个效率会非常低甚至产生错误。

此外你的表设计也不合理。比如第几条微博,第几条评论,无评论 这三种注释代表的字段根本没用,用户删微博或者删评论的时候你也要在多条记录上维护相应的数据,麻烦死了。微博表有一个total_comments字段就足够了。至于到底是第几条,显示的时候自然就知道了,序号肯定是 (页码-1)*每页显示的记录数 + 当前页的第几行,所以没必要放在数据库里面。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号