회원 및 접속현황 테이블을 이용해서 COUNT 출력하는 질문 있습니다 ㅠ,ㅠ
본문
table : table_a (접속 현황 테이블)
id | create_at | member_id |
0 | 2018-01-14 22:17:57 | 0 |
1 | 2018-01-15 17:23:48 | 0 |
2 | 2018-01-17 17:23:47 | 1 |
3 | 2018-01-17 17:23:48 | 0 |
4 | 2018-02-14 23:17:57 | 0 |
5 | 2018-03-15 11:17:57 | 0 |
6 | 2018-04-15 12:17:57 | 1 |
7 | 2019-01-15 13:17:57 | 0 |
8 |
table : member (회원 테이블)
id | user_id | group_id |
0 | user1 | 1 |
1 | user2 | 1 |
이렇게 2개의 테이블을 이용해서
각 회원의 날짜 데이터를 이용해서 접속 현황을 출력하고 싶습니다.
즉 접속현황 테이블하고 회원 테이블을 조인해서 밑에 sql문을 보시면 WHERE 절에 2018 즉 해당 년도를 주입하면
그에 맞는 월단위로 해당 회원이 어느정도 접속되어나 COUNT를 해보았습니다.
일단 제가 sql문을 짜보았습니다!!!SELECT COUNT(*) AS use_count, DATE_FORMAT(a.create_at, '%Y-%m') date, b.user_id FROM table_a AS a LEFT JOIN table_b AS b ON (a.member_id = b.id) WHERE DATE_FORMAT(a.create_at, '%Y') = '2018' AND (b.group_id = 1) GROUP BY b.user_id, date;
결과
use_count | date | user_id |
1 | 2018-01 | user1 |
1 | 2018-04 | user1 |
3 | 2018-01 | user2 |
1 | 2018-02 | user2 |
1 | 2018-03 | user2 |
일단 여기까지 count는 잘 나옵니다 ㅠ,ㅠ
문제는 해당 테이블에 데이터가 없으면 use_count에 0으로 입력 받고 싶습니다 ㅠ,ㅠ
예를들어
제가 원하는 데이터 출력
use_count | date | user_id |
1 | 2018-01 | user1 |
0 | 2018-02 | user1 |
0 | 2018-03 | user1 |
1 | 2018-04 | user1 |
3 | 2018-01 | user2 |
1 | 2018-02 | user2 |
1 | 2018-03 | user2 |
0 | 2018-04 | user2 |
이렇게 데이터가 없으면 해당 유저에 use_count가 0으로 출력되고 date에는 해당되는 날짜로요 ㅠ,ㅠ
이거 정말 어렵네요 ㅠ,ㅠ
db 고수님들 부탁드립니다 ㅠ,ㅠ
답변 1
쿼리 만으로는 어렵습니다.
저라면 이렇게 하겠습니다.
$sql = "
SELECT
COUNT(*) AS use_count,
DATE_FORMAT(a.create_at, '%Y-%m') date,
b.user_id
FROM table_a AS a
LEFT JOIN table_b AS b
ON (a.member_id = b.id)
WHERE DATE_FORMAT(a.create_at, '%Y') = '2018' AND (b.group_id = 1)
GROUP BY b.user_id, date;
";
$query = sql_query($sql);
while($row = sql_fetch_array($query))
$result[$row['date']] = $row['use_count'];
for($i=1;$i<=12;$i++){
$month = "2018-".sprintf('%02d',$i);
echo "{$month} : ".isset($result[$month]) ? $result[$month] : 0;
}
내용은 일단 위처럼 가져온 월별데이터를 배열로 저장 후 해당 내역이 있으면 그 숫자를 출력하고 없음 0을 출력하는 내용입니다.
코드는 테스트 하지 않았습니다. 오류가 있을 수 있습니다.
!-->
답변을 작성하시기 전에 로그인 해주세요.