【问题标题】:Laravel - Syntax error or access violation in Aggregate FunctionLaravel - 聚合函数中的语法错误或访问冲突
【发布时间】:2019-10-29 20:25:58
【问题描述】:

我想执行聚合函数并达到下图所示的结果:

新结果:

我有这个问题:

        $subscribers= Cloudsubscriptions::join("services","cloudsubscriptions.service_name","=","services.name")
            ->join("service_type","services.service_type","=","service_type.id")
            ->select("cloudsubscriptions.service_name"
                    ,"service_type.name as service_type"
                    ,DB::raw("(SELECT count(cloudsubscriptions.id) FROM 'cloudsubscriptions' WHERE 'is_subscribe' = 1) as total_active_users")
                    ,DB::raw("(SELECT count(cloudsubscriptions.id) FROM 'cloudsubscriptions' WHERE 'is_subscribe' = 0) as total_inactive_users")
                    ,DB::raw("(SELECT count(cloudsubscriptions.id) FROM 'cloudsubscriptions') as total_users"))
            ->groupBy("cloudsubscriptions.service_name")
        ->get();

我希望在图表中显示结果,但出现此错误

"SQLSTATE[42000]: 语法错误或访问冲突:1064 您的 SQL 语法有错误;请查看与您的 MariaDB 服务器版本相对应的手册,了解在 ''cloudsubscriptions' WHERE 'is_subscribe' 附近使用的正确语法= 1) as total_active_users, (SELECT co' at line 1 (SQL: select cloudsubscriptions.service_name, service_type.name as service_type, (SELECT count(cloudsubscriptions.id) FROM 'cloudsubscriptions' WHERE 'is_subscribe' = 1) 作为 total_active_users,(SELECT count(cloudsubscriptions.id) FROM 'cloudsubscriptions' WHERE 'is_subscribe' = 0) 作为 total_inactive_users,(SELECT count(cloudsubscriptions.id) FROM 'cloudsubscriptions') 作为来自 cloudsubscriptions 的 total_users内连接servicescloudsubscriptions.service_name=services.name内连接service_typeservices.service_type=service_type.id.id@987 @ order by service_name asc limit 15 offset 0) ◀"

请问如何解决?

【问题讨论】:

    标签: laravel eloquent


    【解决方案1】:

    错误是由原始表达式中的表名和列名周围的单引号引起的。

    删除它们或使用反引号:

    $subscribers= Cloudsubscriptions::join("services","cloudsubscriptions.service_name","=","services.name")
        ->join("service_type","services.service_type","=","service_type.id")
        ->select("cloudsubscriptions.service_name"
                ,"service_type.name as service_type"
                ,DB::raw("(SELECT count(cloudsubscriptions.id) FROM `cloudsubscriptions` WHERE `is_subscribe` = 1) as total_active_users")
                ,DB::raw("(SELECT count(cloudsubscriptions.id) FROM `cloudsubscriptions` WHERE `is_subscribe` = 0) as total_inactive_users")
                ,DB::raw("(SELECT count(cloudsubscriptions.id) FROM `cloudsubscriptions`) as total_users"))
        ->groupBy("cloudsubscriptions.service_name")                ^                  ^
    ->get();
    

    【讨论】:

    • 当我按照您的建议进行操作时,错误不再存在,但没有得到正确的结果。没有: 1. 活跃用户总数 2. 非活跃用户总数。然后总用户有同样的事情。全部是 44,这是不正确的。
    • 这个问题只是语法错误,请提交一个新问题。
    猜你喜欢
    • 2019-02-10
    • 2017-04-16
    • 2018-09-25
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-31
    • 2017-10-29
    • 2018-06-28
    相关资源
    最近更新 更多