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

Laravel中如何获取两张表不同列名的无重复月份数据

解决从两表提取无重复月份的问题

你的当前代码用了crossjoin,这会生成两张表的笛卡尔积,得到的是所有month和retainer_month的组合,完全达不到合并去重的需求。要获取两个表中所有无重复的月份,应该用UNION来合并两个查询结果,UNION会自动去重。

正确的Laravel查询代码

// 先定义第一个查询:获取project表的month列
$projectMonths = DB::table('project_cashflow_attrs')
    ->select('month');

// 合并retainer表的月份列(重命名为统一的month),自动去重
$overallMonth = DB::table('retainer_cashflow_attrs')
    ->select('retainer_month as month')
    ->union($projectMonths)
    // 可选:按月份时间顺序排序(针对"May-2023"这类字符串格式)
    ->orderBy(DB::raw("STR_TO_DATE(month, '%b-%Y')"))
    ->get();

关键说明

  • 列名统一:必须把retainer_month重命名为month,确保两个查询的返回列名一致,UNION才能正常合并。
  • 自动去重:union()方法默认会去除重复条目,不需要额外的groupBy或distinct(若需更明确也可添加->distinct())。
  • 正确排序:如果月份是"May-2023"这类文本格式,直接用orderBy('month')会按字母排序(比如Dec-2023会排在Jan-2023前面),用STR_TO_DATE把字符串转成日期再排序,能保证时间顺序正确。

结果示例

执行后会得到类似如下的无重复有序集合:

[
    {"month": "May-2023"},
    {"month": "June-2023"},
    {"month": "July-2023"},
    ...
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 07:02:53