gpt4 book ai didi

MySql group by with where 条件不起作用

转载 作者:行者123 更新时间:2023-11-29 15:36:16 26 4
gpt4 key购买 nike

我有 2 个表格、问题。我需要结果包含组名称和相应的未删除问题数。两个表的结构和数据如下。

groups-table

enter image description here

我的预期结果如下

enter image description here

我尝试了以下代码,但它给出了整行,包括已删除的问题。

$groupname = DB::table('groups as d')
->select([
'd.id','d.group_name',DB::raw("count(dtls.survey_group_id) as count")
])
->leftJoin('questions as dtls','d.id', '=', 'dtls.survey_group_id')
->whereNotExists( function ($query) {
$query->select(DB::raw(1))
->from('questions')
->where('id', 'd.id')
->where('dtls.is_deleted', 1);
})
->groupBy('d.id','d.group_name')
->get()
->toArray();

最佳答案

这里的一个问题是 ->where('id', 'd.id')id 与文字字符串 d.id 进行数学运算code> 这显然不是你想要的。此外,内部查询表应该使用别名以防止歧义。您可以尝试将其更改为:

$groupname = DB::table('groups as d')
->select([
'd.id','d.group_name',DB::raw("count(dtls.survey_group_id) as count")
])
->leftJoin('questions as dtls','d.id', '=', 'dtls.survey_group_id')
->whereNotExists( function ($query) {
$query->select(DB::raw(1))
->from('questions as innerDtls')
->whereRaw('innerDtls.id = d.id')
->where('dtls.is_deleted', 1);
})
->groupBy('d.id','d.group_name')
->get()
->toArray();

或者,您当前的查询可以简化为:

$groupname = DB::table('groups as d')
->select([
'd.id','d.group_name',DB::raw("count(dtls.survey_group_id) as count")
])
->leftJoin('questions as dtls','d.id', '=', 'dtls.survey_group_id')
->where('dtls.is_deleted', 0)
->groupBy('d.id','d.group_name')
->get()
->toArray();

关于MySql group by with where 条件不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58215162/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com