php - 防止将行字段值重复到下一行
问题描述
我有一个查询,它应该从不同的表中加入不同类型的用户奖金,并每周总结奖金。不同类型奖金的总金额处理得很好,但问题是当用户没有获得任何奖金时,我将值带到下一个。
这是我的查询的样子:
$bonuses =DB::table('users as u')
->select(
'u.id',
'u.referral',
'packages.name as package_name',
'shoppings.week_number as shopping_week',
'performances.week_number as performance_week',
'spillovers.week_number as spillover_week',
'leaderships.week_number as leadership_week',
DB::raw("CONCAT(u.first_name,' ',u.last_name) AS full_name"),
DB::raw('ifnull(sum(shoppings.amount),0) as shopping_amount'),
DB::raw('ifnull(sum(performances.amount),0) as performance_amount'),
DB::raw('ifnull(sum(spillovers.amount),0) as spillover_amount'),
DB::raw('ifnull(sum(leaderships.amount),0) as leadership_amount'),
DB::raw("ifnull(sum(shoppings.amount),0) +
ifnull(sum(performances.amount),0) +
ifnull(sum(spillovers.amount),0) +
ifnull(sum(leaderships
.amount),0)
as total"),
)
->leftJoin('packages', 'u.package_id', '=', 'packages.id')
->leftJoin('shoppings', 'u.id', '=', 'shoppings.user_id')
->leftJoin('performances', 'u.id', '=', 'performances.user_id')
->leftJoin('spillovers', 'u.id', '=', 'spillovers.user_id')
->leftJoin('leaderships', 'u.id', '=', 'leaderships.user_id')
->groupBy('shopping_week', 'performance_week', 'spillover_week', 'leadership_week')
->get();
return $bonuses;
是一个屏幕截图,显示它是如何呈现的。带圆圈的字段应该是0
但正在采用前一行的值。
我真的不知道我做错了什么。提前致谢
我加入的表的架构:
public function up()
{
Schema::create('shoppings', function (Blueprint $table) {
$table->id();
$table->float('amount', 10, 2)->default(0);
$table->boolean('paid')->default(0);
$table->foreignId('user_id');
$table->foreignId('downline_id');
$table->integer('week_number')->nullable();
$table->timestamps();
});
}
public function up()
{
Schema::create('performances', function (Blueprint $table) {
$table->id();
$table->float('amount', 10, 2)->default(0);
$table->boolean('paid')->default(0);
$table->foreignId('user_id');
$table->foreignId('downline_id');
$table->integer('week_number')->nullable();
$table->timestamps();
});
}
public function up()
{
Schema::create('spillovers', function (Blueprint $table) {
$table->id();
$table->float('amount', 10, 2)->default(0);
$table->boolean('paid')->default(0);
$table->foreignId('user_id');
$table->foreignId('downline_id');
$table->integer('week_number')->nullable();
$table->timestamps();
});
}
public function up()
{
Schema::create('leaderships', function (Blueprint $table) {
$table->id();
$table->float('amount', 10, 2)->default(0);
$table->boolean('paid')->default(0);
$table->foreignId('user_id');
$table->foreignId('downline_id');
$table->integer('week_number')->nullable();
$table->timestamps();
});
}
解决方案
推荐阅读
- r - 在R中将分组对组合成一个组
- php - 如何通过 sharedprefrence 保存列表数据
- rust - 为什么 Rust 迭代器的 FnMut 是谓词而不是 Fn?
- python - 不能将 2 定义为素数
- python-3.x - 如果python中相同值的条件不同
- java - 如何从 Firebase 列表视图中的管理员帐户中删除用户帐户?
- c - 在不使用繁忙等待实现的情况下休眠线程的最佳方法是什么?
- java - 控制器和检票口页面的设计模式帮助
- python-3.x - 如何从 Python 3 中的脚本连接 Google Datastore
- javascript - 如何在 for 循环中运行 mongoose 方法,因为 mongoose 函数是异步的