laravel sql 查询字表的个数超过指定个数查询

子表:

goods_sku_log

主表

goods_sku

查询 有两条goods_sku_log记录以上的数据

laravel 实现

一种count(*)实现方式 (数据忽略)

$visits = DB::table('visits')
    ->select('ip_address',DB::raw('count(*) as total'))
    ->where('timestamp', '>=',\Carbon\Carbon::now()->startOfDay())
    ->groupBy('ip_address')
    ->orderBy('total', 'desc')
    ->get();

优雅一点的实现方案

        $goodsSku = GoodsSku::whereHas('goods_sku_log',function ($query){
            $query->havingRaw('count(*) >= 1')->groupBy('id');
        })
            ->with('goods_sku_log')
            ->orderBy('created_at', 'desc')
            ->limit(5)
            ->get();

having 通常用在 groupBy

实现的SQL:

select
  *
from
  `goods_sku`
where
  exists (
    select
      *
    from
      `goods_sku_log`
    where
      `goods_sku`.`id` = `goods_sku_log`.`goods_sku_id`
    group by
      `id`
    having
      count(*) >= 1
  )
  and `goods_sku`.`deleted_at` is null
order by
  `created_at` desc
limit
  5

参考:stackoverflow

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

廖圣平

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值