gpt4 book ai didi

mysql - withCount() - 得到 2 个计数的差异

转载 作者:行者123 更新时间:2023-11-30 23:43:19 26 4
gpt4 key购买 nike

我有一个表,其中有一列 is_up_vote = true|false

我正在尝试使用 withCount() 编写一个查询,以便它返回真值和假值的总和。

从 comment_votes 中选择 COUNT(is_up_vote) WHERE is_up_vote = true 返回 17

select COUNT(is_up_vote) from comment_votes WHERE is_up_vote = false 返回 15

但是我不知道如何让它们不同,所以总返回 2。

我尝试的是:

Model::withCount(['votes' => function($q) {
$q->selectRaw(
'(SUM (COUNT(is_up_vote) WHERE is_up_vote = true) - (COUNT(is_up_vote) WHERE is_up_vote = false) )'
);
}]);

但这会返回 17+15 = 32

没有 SUM(),它也返回 32。

$q->selectRaw(
'( (COUNT(is_up_vote) WHERE is_up_vote = true) - (COUNT(is_up_vote) WHERE is_up_vote = false) )'
);

我做错了什么?

编辑:

如果我尝试一侧,它会忽略 where 并仍然返回 32,因此 where 不会被调用(它在 sql 中的位置)

return $query->withCount(['votes' => function($q) {
$q->selectRaw('(COUNT(is_up_vote) WHERE is_up_vote = true)');
}]);

maunal 续集查询返回 17:

select COUNT(is_up_vote) from comment_votes WHERE is_up_vote = true

编辑 2:

$query->withCount([
'votes as up_votes_count' => function($q) {
$q->where('is_up_vote', true);
},
'votes as down_votes_count' => function($q) {
$q->where('is_up_vote', false);
},
]);

我唯一能做的就是这个,但它需要额外的步骤才能得到总数,所以我不太喜欢这种方法。我敢肯定,更精通查询的人可以想出一些直接查询的方法。

最佳答案

withCount 可能无法处理这种情况。使用 addSelect 怎么样?计算票数。

return Model::addSelect(['votes_count' => Vote::selectRaw('( (COUNT(is_up_vote) WHERE is_up_vote = true) - (COUNT(is_up_vote) WHERE is_up_vote = false) )')
->whereColumn('parent_id', 'parents.id')
])->get();

我不知道子查询是否会起作用。但你知道这个想法。

关于mysql - withCount() - 得到 2 个计数的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59651094/

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