채택완료

select count로 칼럼에서 인원수를 구하려고 하는데요

2022-11-04 (금) 02:26:28 2,070

천천히 전후사정을 설명해보겠습니다.

planetowl님께서 만드신 미니클럽이란 스킨을 다운받아서 해보고 있어요!

https://sir.kr/g5_skin/2902

테이블 생성은 아래와 같이 되어있구요!!

<code>

CREATE TABLE IF NOT EXISTS `g5_miniclub_member` (
  `no` int(11) NOT NULL AUTO_INCREMENT,
  `miniclub_table` varchar(20) NOT NULL,
  `mb_id` varchar(20) NOT NULL,
  `status` varchar(10) NOT NULL DEFAULT '4',
  `join_date` datetime NOT NULL,
  KEY `no` (`no`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1");

</code>

테이블에서 status 는 등급 구조를 말하는데요

이게 4단계로 되어있어서

1은 매니저 관리자

2는 부매니저

3은 정회원

4는 신청서 넣은 사람

이렇게 status가 4단계로 되어있어요

실제로 phpmyadmin 에서 보면 아래와 같이 찍히고 있지요!

3690604471_1667495046.7226.png

여기서 어떤 문제가 있느냐면... 활동하는 정회원수를 구하려고 하는데 그게 안되요..

status 가 4는 = 신청서 넣은 사람이기 때문에 실제 활동회원이 아니고 

(대기하는 사람이 status 가 4라) //

4를 제외한 실제 활동회원 ( status 1 이나 2나 3의 ) 수를 구하려고 하는것이거든요

planetowl님 스샷을 보면

저 아래 

전체 : 2명 정회원 : 0명 이렇게 숫자가 나오고 계시거든요.

3690604471_1667495320.4471.gif

저 같은 경우는 

3690604471_1667495384.3309.png

이렇게 숫자0 조차도 안나오고 있어요 // 아에 숫자란에 암것도 등장하질 않음 ㅠ

planetowl님의 원코드를 보자면

Copy
// 정회원 수
$dbresult = sql_query( "select count(*) from g5_miniclub_member where status < 4 and miniclub_table = '$tablename'"); 
$member_rows = mysql_fetch_array( $dbresult ); 
echo "<b>정회원 : $member_rows[0]명</b>";

이렇게 되어있으세요

묻고 검색하다보니

$member_rows = mysql_fetch_array( $dbresult ); 를

단일행에서 구하는식으로

$member_rows = sql_fetch( $dbresult ); 에 바꿔봤는데도 여전히 안찍히고 있어요~

쿼리문인

$dbresult = sql_query( "select count(*) from g5_miniclub_member where status < 4 and miniclub_table = '$tablename'"); 

이또한 g5_miniclub_member 테이블에서 카운트를 하는데

status < 4 미만으로 다 되어있는거 같고...

무엇보다도 다른분들은 되는거 같은데..또 저를 포함한 몇몇분들은 안되는거 같아요

원래 스킨을 올리신 planetowl님도 아무 문제가 없으신거 같은데..

심지어 그누보드를 버전을 다운해봐서 테스트도 해봣는데 똑같아요 ㅠ

( 카운터만 집계만 그럴뿐이지 다른 기능들은 기능적으론 문제가 없어요! )

3690604471_1667496009.4507.jpg

만드신 planetowl님께서 요즘 접속을 안하고 계시고.. 어디 여쭤볼곳이 없어서...

혹시 조언해주실분 계시면 감사드리겠습니다 ㅠ

카운트 하나 집계못하는 초짜가 해보다해보다 탈모가 와서 질문을 남기고 가요

|

답변 4개 / 댓글 5개

채택된 답변
+20 포인트

$member_rows = mysql_fetch_array( $dbresult ); 

아래처럼 고쳐 보세요  

$member_rows = mysqli_fetch_array( $dbresult );       

직접 설치해 보고 드리는 글입니다 (  mysqli_fetch_array  => i 포함된 )

PHP의 버전에 따라 어느 곳에서는 예전 버전인 mysql_fetch_array 지원이 

되어서 보여주고 어느곳은 지원이 안되어 보여주지 않는 ( 모듈 설치가 되지 않아 ) 생기는 오류로 

알고 있습니다

답변에 대한 댓글 1개

아하 php 버전에 따른 상황이었나보네요!! 해보니깐 잘나오네요!! 감사드립니다!

$dbresult = sql_query( "select * from g5_miniclub_member where status in ('1','2','3') and miniclub_table = '$tablename'");

$member_rows = sql_num_rows( $dbresult );

echo $member_rows;

이거는 안되나요?

답변에 대한 댓글 1개

감사! 또 감사드립니다! 채택을 드려야될분들이 너무 많은데 채택이 1개뿐이 안됨을 용서하소서 ㅠ.ㅠ 문자형으로 정확히 말씀하신대로 하니 잘나옵니다!! 감사드려요

생성할때 컬럼을 보면

status varchar 로 되어있습니다. 즉, 문자열이죠

Copy
// 정회원 수
$dbresult = sql_query( "select count(*) from g5_miniclub_member where status < 4 and miniclub_table = '$tablename'");

에서보면

status < 4 로 하셨죠

정수형이 아닌 문자형인데말이죠

status in ('1','2','3') 으로 하거나

status not in ('4') 로 하시는게 좋을겁니다.

변경하면 + 약간 수정하면

Copy
// 정회원 수
$member_rows= sql_fetch( "select count(*) cnt from g5_miniclub_member where status not in ('4') and miniclub_table = '{$tablename}'"); 

echo "<b>정회원 : {$member_rows['cnt']}명</b>";

로 해보세요

답변에 대한 댓글 1개

아! 잠깐 그 생각을 해봤었는데 다른분들은 왜 저렇게 했을때 잘나오고 나만 이럴까 생각을해봤었죠
ㅠ.ㅠ 채택이 하나뿐 안가네요 ㅠ.ㅠ 용서하소서...

플래토님은 더 정확히 핵심을 찝어서 가르쳐주셨어요 감사드립니다~
2022-11-04 (금) 05:22:05

에러 메시지를 보셨다면

해결하실 수 있었을 겁니다.

답변에 대한 댓글 2개

아하
error_reporting(E_ALL);
ini_set("display_errors", 1); 이렇게 넣어서 에러메세지를 확인하는군요!!
오늘 첨 알았습니다!! 감사합니다
어디서 에러메세지를 확인하는거지 하고 어리둥절하던 초보랍니다 ㅠ.ㅠ
엑스엠엘님 덕분에 앞으로 든든합니다! 에러만 나와봐라!!!

답변을 작성하려면 로그인이 필요합니다.