Laravel查询会出现不同的值

时间:2015-03-09 19:08:25

标签: php mysql laravel

编辑:通过在我的查询中添加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子句之前发生,所以我在计数中得到的数字是'text'出现在我整个表中的数字。

谢谢!

1 个答案:

答案 0 :(得分:1)

这有点复杂,但要这样做,您需要在文本列上加入表格,按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;