Reputation: 2637
I want to perform aggregate function and achieve the result shown in the diagrame below:
New Result:
I have this query:
$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();
I expect to have a result show in the diagram, but I got this error
"SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''cloudsubscriptions' WHERE 'is_subscribe' = 1) as total_active_users, (SELECT co' at line 1 (SQL: select
cloudsubscriptions
.service_name
,service_type
.name
asservice_type
, (SELECT count(cloudsubscriptions.id) FROM 'cloudsubscriptions' WHERE 'is_subscribe' = 1) as total_active_users, (SELECT count(cloudsubscriptions.id) FROM 'cloudsubscriptions' WHERE 'is_subscribe' = 0) as total_inactive_users, (SELECT count(cloudsubscriptions.id) FROM 'cloudsubscriptions') as total_users fromcloudsubscriptions
inner joinservices
oncloudsubscriptions
.service_name
=services
.name
inner joinservice_type
onservices
.service_type
=service_type
.id
group bycloudsubscriptions
.service_name
order byservice_name
asc limit 15 offset 0) ◀"
How do I resolve it please?
Upvotes: 0
Views: 297
Reputation: 25906
The error is caused by the single quotes around table and column names in the raw expressions.
Remove them or use backticks:
$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();
Upvotes: 1