【问题标题】:Laravel raw query: total with select inside countLaravel 原始查询:总计与选择内部计数
【发布时间】:2018-10-10 13:40:19
【问题描述】:

我正在构建一个 SQL 查询(Postgres 很重要),它将返回包含所有字段和引用总数的文章列表。

$a = Articles::select(DB::raw('
            *,
            count(
                select * from "references"
                where exists (select * from "users" where "users"."reference_id" = "references"."id"
                and "article_id" = ?????
            ) as total'
    ))->where('created_at', '<', $date)->get();

我把它简化了一点; count() 中有更多“存在”条件;还有更多的 ->where() 规则是动态的,很难用原始 SQL 重写。我的主要误解是如何放置相应的article_id而不是?????。谁能给我一个提示。

【问题讨论】:

    标签: sql laravel


    【解决方案1】:

    【讨论】:

    • 请在您的答案中添加一些代码或内容,而不仅仅是指向另一个页面的链接:)
    【解决方案2】:

    您可以使用 PHP 数组传入要绑定到原始选择的参数:

    $a = Articles::select(DB::raw('
             *,
             count(
                 select * from references r
                 where exists (select 1 from users u
                               where u.reference_id = r.id and article_id = ?)
            ) as total', ['some id here']))
        ->where('created_at', '<', $date)
        ->get();
    

    在 Postgres 中编写查询可能有更好的方法。如果您可以添加一些示例数据,也许可以说更多。

    【讨论】:

    • 但是这个“这里的一些 id”应该来自当前 article_id,我正在运行这个计数并且我通过 Articles::select (*);所以我不明白如何从查询中调用它
    • 现在你失去了我。我已经回答了您关于如何将参数绑定到原始 Laravel 选择的确切问题。如果您的查询有其他问题,请显示解释您的查询的示例数据。
    • 那么,如果我把'id'放在括号里,它会使用当前的文章id,对吗?
    • 是的,[$some_article_id] 之类的东西应该可以工作。如果你想使用实际查询中可用的,那么你不需要绑定参数;只需使用常规 SQL。同样,如果您在查询方面需要帮助,请显示一些数据。
    • 但是 article_id 是动态选择的。我没有预先设置 $some_article_id 。 Articles::select(DB::raw(' 给了我文章列表,每篇文章都有唯一的 ID。并且 count() 应该包含这个 id - 每行都不同。
    猜你喜欢
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    • 2016-03-21
    • 2017-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-13
    相关资源
    最近更新 更多