You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中如何对关联表字段执行WHERE LIKE查询并统计数据?

解决方法

要实现按关键词统计对应location下包含该关键词的评论数量,你需要调整查询的关联条件、添加分组逻辑,同时修正字段名的小错误,完整代码如下:

DB::table('keywords')
    ->select('keywords.keys as key', DB::raw('COUNT(comments.id) as count'))
    // 使用左连接确保所有关键词都被统计,无匹配评论时count为0
    ->leftJoin('comments', function($join) {
        $join->on('comments.location_id', '=', 'keywords.location_id')
             // 匹配评论内容包含当前关键词的记录
             ->whereRaw('comments.comment LIKE CONCAT("%", keywords.keys, "%")');
    })
    // 按关键词分组,保证每个关键词对应一条统计结果
    ->groupBy('keywords.id', 'keywords.keys')
    ->get();

关键说明:

  • 修正字段名:你的表结构里关键词字段是keys,不是key,所以查询里要写keywords.keys,并通过as key对齐期望的输出字段
  • 采用leftJoin替代普通join:如果某个关键词在对应location下没有匹配的评论,依然会保留该关键词的记录,统计数为0
  • 关联条件同时过滤location和关键词匹配:在join的闭包内同时指定location_id关联和评论包含关键词的条件,避免后续额外过滤带来的性能损耗
  • 分组逻辑:必须按关键词的唯一标识(id)和keys分组,确保每个关键词的统计结果独立

可选优化:

如果需要精确匹配单词(比如避免"sample"匹配"samples"),可以把LIKE替换为正则表达式(以MySQL为例):

->whereRaw('comments.comment REGEXP CONCAT("[[:<:]]", keywords.keys, "[[:>:]]")')

内容的提问来源于stack exchange,提问作者TheGPWorx

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 19:05:45