- 用
with
的话无法limit
数量的 -
take
也一样,查到的都是空 - 你们是怎么解决的啊?
- 也可以是只查询各个文章的前10条评论?
刚试了一下,在单数据的情况下是可以,在列表里面貌似是不行的,这个 with 函数的加载只是优化了一下第二步的 SQL 语句。就算知道了你第一句 SQL 获取的 ID,如果要每条数据都取前十的关联数据,我认为一条简单的 SQL 语句完成不了,因为不管你限制多条,都无法保证平均分配到每一条主数据上。
2 回答3.1k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
1 回答1k 阅读✓ 已解决
1 回答1.3k 阅读✓ 已解决
2 回答1.2k 阅读
1 回答1.2k 阅读
1 回答1k 阅读
------------ 分割线 ----------
如果 with 里的 limit 和 take 不行的话,那么就比较麻烦了,还有其他一些折中的方法。
方法1:
在 blade 中要显示评论数据的地方
post->comments()->limit(10)
问题:如果取了 20 条 Post 数据,就会有 20 条取 comments 的 sql 语句,会造成执行的 sql 语句过多。
方法2:
直接通过 with 把 Post 的所有 comments 数据都取出来,在 blade 中
post->comments->take(10)
两种方法都可以去构造其他查询条件,过滤自己想要的数据。
方法3:
其实该问题的难点是在于:在文章列表时候,要把文章的相关评论取N条,之前
with
的take
不行,是因为mysql
的语法不像SQL Server
和Order
那样支持over partition by
分组。所以方法3实现的是类似
over partition by
这样的分组功能。comments
表根据post_id
进行分组,然后计数获得rank
,然后取 rank < 11 的数据,也就是前 10 条数据。