gpt4 book ai didi

php - Laravel 查询获取不同值的出现次数

转载 作者:行者123 更新时间:2023-11-29 12:21:24 34 4
gpt4 key购买 nike

编辑:通过在查询中添加 where 子句来解决

    ->where('first.test_id',$test_id)
->where('second.test_id',$test_id)
->where('first.is_private',0)
->where('second.is_private',0)

我有一个包含几列的表 - id、text、test_id、is_private 和其他几列。

我想选择表中的所有行,此外我希望每个对象都包含一个计数器,以便我知道文本在表中出现的次数

尝试关注此帖子:http://www.tagwith.com/question_164722_count-occurrences-of-distinct-values-using-laravel-query-builder

但是,我不想对结果进行分组,并且还根据测试 ID 使用 where 子句

例如,对于以下条目,我想选择 test_id=700 的条目:

id text test_id
1 abc 700
2 abc 700
3 aaa 700
4 abc 701

输出应该类似于:

$rows[0] = {id = 1, text='abc',count=2}
$rows[1] = {id = 2, text='abc',count=2}
$rows[2] = {id = 3, text='aaa',count=1}

使用以下查询:

    return DB::table('comments AS first')
->select(['first.*',DB::raw('count(first.text)')])
->join('comments as second','first.text','=','second.text')
->where('first.test_id',$test_id)
->where('first.is_private',0)
->orderBy('first.question_number', 'asc')
->orderBy('first.subquestion_number', 'asc')
->groupBy('first.id')
->get();

我没有得到正确的结果,看起来计数发生在 where 子句之前,所以我在计数中得到的数字是“文本”出现在整个表中的数字。

最佳答案

这有点复杂,但要做到这一点,您需要在文本列上连接表格本身,按 ID 进行分组,然后选择计数。

像这样的东西应该有效......

    $results = DB::table('test as a')
->select(['a.id', 'a.text', DB::raw('count(*)')])
->join('test as b', 'a.text', '=', 'b.text')
->groupBy('a.id')
->get();

或者原始 SQL

SELECT 
a.id,
a.text,
COUNT(*)
FROM test A
INNER JOIN test B ON a.text = b.text
GROUP BY a.id;

关于php - Laravel 查询获取不同值的出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28949910/

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