如何用 Laravel 的 Model 或者 DB 格式 实现以下需求呢
cs_goods 表结构
id | goods_id | cs_merchant_id | created_at |
---|---|---|---|
1 | 234 | 3 | 2019-07-09 19:45:33 |
2 | 33 | 3 | 2019-07-10 19:45:33 |
3 | 44 | 3 | 2019-07-11 19:45:33 |
4 | 55 | 3 | 2019-07-01 19:45:33 |
5 | 33 | 5 | 2019-07-02 19:45:33 |
6 | 44 | 5 | 2019-07-08 19:45:33 |
7 | 55 | 6 | 2019-07-06 19:45:33 |
需求:获取 cs_goods 表中的所有商品,但同一个超市最多只能出现 3 个商品(cs_merchant_id 是超市id),并用created_at 进行倒序排列,最后的结果应该是 3 2 1 6 7 5
除了循环 还有没有更高效的写法
原生sql:
SELECT a.* FROM cs_goods a WHERE ( SELECT COUNT(*) FROM cs_goods WHERE cs_merchant_id = a.cs_merchant_id AND id > a.id ) < 3 ORDER BY a.created_at desc;
请问不用原生sql语句,怎么用 Model 或者 DB 格式进行查询?
首先我认为你给出的原生SQL是错误的,查询结果并不符合你所预期的
正确的原生SQL应该是这样的:
然后我们可以使用DB类来构建以上SQL,此处给出
方式2 关联查询
的构建代码:最后,像一些复杂查询的SQL,是不是直接先原生SQL更好一些呢?