【问题标题】:Laravel 4 Fluent countLaravel 4流利计数
【发布时间】:2013-08-23 07:52:04
【问题描述】:

我正在使用 Laravel 4 php 框架,我需要使用 fluent 查询生成器来获取一些统计类型的数据。 我有一个结构如下的数据库表

id: int
group_id: int
sent_at: datetime
message_id: int

我需要一个流畅的查询来获取具有相同消息 ID 的所有行的计数,并且我还希望通过 group_id 组织该计数。

例如,我的消息 id 为 1,消息 id 为 1 的每一行都有一个组 id,该组 id 可能相同,也可能不同。我需要知道表中给定消息 ID 的组 ID,以及每个组 ID 的总数。

我希望这是有道理的。

感谢您的帮助。

【问题讨论】:

    标签: php mysql laravel


    【解决方案1】:

    这是 Laravel 4 版本:

    $message_id = 1;
    
    // You can change "amount" to anything that best suits you
    // The `orderBy` line is not necessary, but I'm assuming you will may need it.
    $groups = DB::table('YOUR_TABLE_NAME')
        ->select(array('group_id', DB::raw('COUNT(*) `amount`')))
        ->where('message_id', '=', $message_id)
        ->groupBy('group_id')
        ->orderBy('amount', 'DESC')
        ->get();
    
    foreach ($groups as $g) {
        echo "$g->group_id has $g->amount messages with id $message_id";
    }
    

    【讨论】:

    • 计数后的amount 是什么?,我也认为我看到了语法错误,select 子句中的右括号不够
    • 您对语法错误的看法是正确的。我已经修好了。 amount 告诉 SQL 将列命名为“amount”,然后在循环中将其转换为 $g->amount。你可以随意命名。
    【解决方案2】:

    尝试该查询以获取每个 message_id 的 group_id 计数:

    SELECT message_id, count(group_id) FROM table GROUP BY message_id
    

    要为给定的 message_id 获取它,只需使用“WHERE”:

    SELECT message_id, count(group_id) FROM table WHERE message_id = XX GROUP BY message_id
    

    要获取给定 message_id 的所有 group_id,只需使用这样的简单查询:

    SELECT group_id FROM table WHERE message_id = XX
    

    如果这不是您要找的东西,请告诉我 - 我们会处理正确的 :)

    (当然把“table”改成你的表名)

    编辑:获取 message_id = 1 的 group_id 计数的流利版本示例:

    $query = DB::table('table')
    ->select(array('message_id', DB::raw('COUNT(group_id) as group_count')))
    ->where('message_id', '=', 1)
    ->group_by('message_id')
    ->get();
    

    【讨论】:

    • OP 要求流畅的查询,而不是原始 SQL。
    • 没错,这里是给定 message_id 的 group_id 计数的流畅版本:$query = DB::table('table')->select(array('message_id', DB::raw('COUNT(group_id) as group_count')))->where('message_id', '=', 1)->group_by('message_id')->get();
    • @MichałPrajsnar,您能否重写您的答案以更客观。也许您可以在原始 SQL 之前显示流畅的查询,或者如果 SQL 查询不相关,则简单地删除它。如果你改进它,我会支持你的答案。
    猜你喜欢
    • 2018-10-05
    • 2019-06-19
    • 2012-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多