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

Laravel使用Query DB统计标签文章数时无文章标签不显示如何解决

问题原因

你当前的查询对tag_post表使用了内连接(INNER JOIN),内连接仅会返回两张表中同时满足关联条件的记录,没有关联任何文章的标签在tag_post表中没有对应匹配项,因此会被直接过滤,不会出现在结果集中。

修改方案

把对tag_post的内连接改为左连接(LEFT JOIN),同时可以优化冗余的子查询统计逻辑,修改后代码如下:

$query = DB::table('tags');
$query->join('users', 'users.id', '=', 'tags.user_creative_id');
// 将tag_post的内连接改为左连接,保留所有标签记录
$query->leftJoin('tag_post', 'tag_post.tag_id', '=', 'tags.id')
      ->select('tags.*', 
                // 直接统计关联的文章关联记录,无关联时自动统计为0
                DB::raw('COUNT(tag_post.id) as count_posts')    
       )
      ->orderBy('count_posts','desc')
      ->groupBy('tags.id');
改动说明
  • join('tag_post')替换为leftJoin('tag_post'):左连接会保留左表(tags表)的全量记录,哪怕右表tag_post没有匹配的关联记录,也不会过滤掉无文章的标签
  • 移除嵌套子查询改用COUNT(tag_post.id)统计:左连接后无关联文章的标签对应的tag_post字段全为NULL,COUNT仅统计非NULL记录,因此无文章的标签count_posts会自动返回0,统计效率更高逻辑也更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 15:09:02