성씨 분포도? 를 만들어 보려고 합니다.

성씨 분포도? 를 만들어 보려고 합니다.

QA

성씨 분포도? 를 만들어 보려고 합니다.

답변 3

본문

회원들 이름을 가지고

성씨 분포도? 를 만들어 보려고 합니다.

 

성을 중복없이 추출해서 

김씨 3명  (김가나, 김다라, 김마바)

이씨 2명  (이가나, 이다라)

....

이런 식으로 표현하려고 아래 코드를 만들다 막혔습니다.

 


<?php
$sql1="select substr(mb_name,1,1) , count(*)  from g5_member group by substr(mb_name,1,1)";  // 성만 추출
$f_name = sql_query($sql1);
while ( $row=sql_fetch_array($f_name) ) $list_f_name[] = $row;
echo $end=count($list_f_name);
//print_r2($list_f_name); 

for($i=0; $i < $end; $i=$i+1) {
    $sql2="select mb_name from g5_member where mb_name like '" .$list_f_name[$i]. "%'"; // 해당하는 사람 추출
    $name = sql_query($sql2);
    while ( $row=sql_fetch_array($name) ) $list_name[$i][] = $row;  //여기가 문제인듯
}
    print_r2($list_name);
?>

 

이 질문에 댓글 쓰기 :

답변 3

<?php
$sql1="select substr(mb_name,1,1)
lname , count(*) cnt  from g5_member group by substr(mb_name,1,1)";  // 성만 추출
$f_name = sql_query($sql1);
while ( $row=sql_fetch_array($f_name) ) $list_f_name[ $row['lname']] = $row['cnt'];

print_r2($list_f_name); 

?>
 

방법은 다양하게 있습니다.

이렇게 하면 이름들이 출력될겁니다.


select substr(mb_name,1,1) , COUNT(*),GROUP_CONCAT(mb_name ORDER BY mb_name ASC )  from g5_member group by substr(mb_name,1,1)

 


select substr(mb_name,1,1) , COUNT(*),GROUP_CONCAT(mb_id ORDER BY mb_id ASC )  from g5_member group by substr(mb_name,1,1)

 

이 쿼리를 한번 실행해 보시면 영감이 떠오르실겁니다.

방법들은 앞에서 제시해 주신대로 하면 되는데...

남씨와 남궁씨 등을 솎아내는 로직도 필요할 듯요.

거기에

남궁 민 과 남 궁민을 가려내는 것두요.

코드란게 작은 빈틈을 막는다는 것이 쉽지는 않습니다.

애초에 성필드를 하나 더 만들거나
아니면 회원가입시 성과 이름 사이에 공백을 넣으라고 해야죠.
그럴 경우 공백이 읽혀지지 않으면 경고창이 뜨는 로직을 넣고 이름필드를 공백 기준으로 explode 해서 [0]을 취하도록 해야겠구요.
이놈의 코딩이란게 주요로직을 짜는 것보다 빈틈 막는 로직을 짜는 게 어떨 때는 시간이 더 걸리더라구요.
배보다 배꼽이 더 큰 경우가 비일비재한데 클라측에서는 왜 빨리 안 되냐고 독촉...
울고 싶은 상황이 많습니다. 개발자의 숙명이라 할까요?

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 1,435
© SIRSOFT
현재 페이지 제일 처음으로