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

bVtSG4

可这并不是我想要的结果,我希望去除重复,将comment存储为一个数组,成为只有一条结果的形式,请大神赤脚。也许可能会说用 distinct,但是不行

目的:我想写个微博评论系统 【现在是想显示出每条微博对应的评论】

bVtSG4

bVtSG6

bVtSGT

回复内容:

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是这样的,结果如图:

bVtSG4

可这并不是我想要的结果,我希望去除重复,将comment存储为一个数组,成为只有一条结果的形式,请大神赤脚。也许可能会说用 distinct,但是不行

目的:我想写个微博评论系统 【现在是想显示出每条微博对应的评论】

bVtSG4

bVtSG6

bVtSGT

我来打击一下你:

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

GROUP BY的用法

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

select tb.*,tbc.comment

from blog_tinyblog as tb,blog_tbcomment as tbc

where tb.num=tbc.num_tiny_blog

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

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

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

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

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

我没看懂你的意思。

你想要做什么。

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

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

最佳方案是只获取微博和评论数就行了,具体的评论可以用ajax去取,没必要一次取出来,这样压力比较大。

如果你一定要一次取出来可以考虑group_concat这个函数,具体去查mysql手册,但是不推荐,如果评论很多的话这个效率会非常低甚至产生错误。

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

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值