I have 2 tables.
I am trying to get all columns from articles
- and the number of status where status = 0 as status0
- and the number of status where status = 1 as status1
"Get all from articles and for each article row get the number of comments where status = 0 as status0 and get the number of comments where status = 1 as status1". Possible?
Tables:
articles
========
id name
---------
1 abc
2 def
3 ghi
comments
========
id article_id status
-------------------------
1 2 1
2 2 0
3 1 0
4 3 1
Expected result of articles combined with status numbers:
id name status0 status1
------------------------------
1 abc 1 0
2 def 1 1
3 ghi 0 1
I am using Eloquent of Laravel, but would be sufficient to see the raw sql statement. I have no clue how to query and count these status.
Thanks to fiddle I have managed to create this query, but I get an error: Note that (articles = db_surveys and comments = db_answers)
"SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.`status=1) status1` from `db_surveys` left join `db_answers` on `db_surveys`.`i' at line 1 (SQL: select `db_surveys`.`*, SUM(db_answers`.`status=0) status0, SUM(db_answers`.`status=1) status1` from `db_surveys` left join `db_answers` on `db_surveys`.`id` = `db_answers`.`surveyid` where `db_surveys`.`userid` = 6oGxr)"
Full query:
"select `db_surveys`.`*, SUM(db_answers`.`status=0) status0, SUM(db_answers`.`status=1) status1` from `db_surveys` left join `db_answers` on `db_surveys`.`id` = `db_answers`.`surveyid` where `db_surveys`.`userid` = 123 group by `db_surveys`.`id`"
**
Final query:
**
SELECT
`s`.*,
SUM(`a`.`status`='pending') `status0`,
SUM(`a`.`status`='confirmed') `status1`
FROM
`db_surveys` s
LEFT JOIN `db_answers` a
ON `s`.`id` = `a`.`surveyid`
WHERE `s`.`userid` = '6oGxr'
GROUP BY `s`.`id`