欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

求正确SQL的写法。

程序员文章站 2022-05-25 11:32:22
...

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是这样的,结果如图:求正确SQL的写法。

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

求正确SQL的写法。

求正确SQL的写法。

回复内容:

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是这样的,结果如图:求正确SQL的写法。

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

求正确SQL的写法。

求正确SQL的写法。

我来打击一下你:

  1. 你的数据库设计有些问题。建议在做东西的时候将mysql相关的书看一下。(关联用num?)

  2. GROUP BY的用法

  3. sql语句查询的时候大写会提高一丝丝效率,但是你这样关键字大小写混合就不要用了

  4. select tb.*,tbc.comment
    from blog_tinyblog as tb,blog_tbcomment as tbc
    where tb.num=tbc.num_tiny_blog

  5. 如果说上面的这些都能够忍受的话,那我就只能拿你问问题的格式来说事儿了 排版乱,逻辑乱 而且你还用图片,难道让我们敲上去试试?

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

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

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

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

  1. 我没看懂你的意思。

  2. 你想要做什么。

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

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

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

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

相关标签: php mysql