정리. 질문의 Query는 1점을 가진 회원수 구하기였고, 그게 제일 간결합니다.
회원수 상관없이 1점이 총 몇 개인지 구하려면, 길어지면 길어졌지 짧게 작성은 어렵습니다.
간단(?)하게는 아래처럼 1점이 포함된 회원을 구하고,
mb_1~mb_7까지 반복하며 1점일 때 카운트 증가시켜주면 되는데…
$sql = "SELECT * FROM {$g5['member_table']} WHERE mb_1=1 OR mb_2=1 OR mb_3=1 OR mb_4=1 OR mb_5=1 OR mb_6=1 OR mb_7=1";
$result = sql_query($sql);
$cnt = 0;
while ( $row=sql_fetch_array($result) ) {
for ($i=1; $i<=7; $i++) if ( $row['mb_'.$i]==1 ) $cnt++;
}
그보다는 아래가 효율적이네요.
/*
SELECT
SUM(IF(mb_1=1, 1, 0)
+IF(mb_2=1, 1, 0)
+IF(mb_3=1, 1, 0)
+IF(mb_4=1, 1, 0)
+IF(mb_5=1, 1, 0)
+IF(mb_6=1, 1, 0)
+IF(mb_7=1, 1, 0)) AS cnt
FROM {$g5['member_table']}
*/
$sql = "SELECT SUM(IF(mb_1=1,1,0)+IF(mb_2=1,1,0)+IF(mb_3=1,1,0)+IF(mb_4=1,1,0)+IF(mb_5=1,1,0)+IF(mb_6=1,1,0)+IF(mb_7=1,1,0)) AS cnt FROM {$g5['member_table']}";
/* WHERE 조건 그대로 넣어주면, 길어지긴 하지만 좀 더 효율이 좋아집니다.
$sql = "SELECT SUM(IF(mb_1=1,1,0)+IF(mb_2=1,1,0)+IF(mb_3=1,1,0)+IF(mb_4=1,1,0)+IF(mb_5=1,1,0)+IF(mb_6=1,1,0)+IF(mb_7=1,1,0)) AS cnt FROM {$g5['member_table']}
WHERE mb_1=1 OR mb_2=1 OR mb_3=1 OR mb_4=1 OR mb_5=1 OR mb_6=1 OR mb_7=1";
*/
$cnt = sql_fetch($sql)['cnt']; // PHP v5.5 이상 사용 가능
/* PHP v5.5 미만은 아래 기존처럼
$row = sql_fetch($sql);
$cnt = $row['cnt'];
*/
* 참고로 아래 형태도 편하긴 합니다.
SELECT SUM(cnt) AS cnt FROM (
SELECT COUNT(*) AS cnt FROM {$g5['member_table']} WHERE mb_1=1
UNION ALL
SELECT COUNT(*) AS cnt FROM {$g5['member_table']} WHERE mb_2=1
UNION ALL
SELECT COUNT(*) AS cnt FROM {$g5['member_table']} WHERE mb_3=1
UNION ALL
SELECT COUNT(*) AS cnt FROM {$g5['member_table']} WHERE mb_4=1
UNION ALL
SELECT COUNT(*) AS cnt FROM {$g5['member_table']} WHERE mb_5=1
UNION ALL
SELECT COUNT(*) AS cnt FROM {$g5['member_table']} WHERE mb_6=1
UNION ALL
SELECT COUNT(*) AS cnt FROM {$g5['member_table']} WHERE mb_7=1
) AS T