채택완료

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

2022-01-25 (화) 20:02:56 2,170

회원들 이름을 가지고

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

성을 중복없이 추출해서 

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

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

....

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

Copy
<?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개 / 댓글 3개

채택된 답변
+20 포인트
2022-01-25 (화) 20:06:03

<?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); 

?>
 

2022-01-25 (화) 20:25:28

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

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

거기에

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

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

답변에 대한 댓글 3개

한글만으로는 불가능할 듯하네요.
한자까지 있으면 가능하지 않을까요?
애초에 성필드를 하나 더 만들거나
아니면 회원가입시 성과 이름 사이에 공백을 넣으라고 해야죠.
그럴 경우 공백이 읽혀지지 않으면 경고창이 뜨는 로직을 넣고 이름필드를 공백 기준으로 explode 해서 [0]을 취하도록 해야겠구요.
이놈의 코딩이란게 주요로직을 짜는 것보다 빈틈 막는 로직을 짜는 게 어떨 때는 시간이 더 걸리더라구요.
배보다 배꼽이 더 큰 경우가 비일비재한데 클라측에서는 왜 빨리 안 되냐고 독촉...
울고 싶은 상황이 많습니다. 개발자의 숙명이라 할까요?
2022-01-27 (목) 00:30:56
그러게요. 생각 못했네요 ^^;
확인해보니 '스마일' '알리' 같은 외국인도 있더군요!!
공부할겸 해보려고 한건데.. 하지 말까 고민입니다. ^^;
답변 감사합니다.
2022-01-25 (화) 20:11:05

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

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

Copy
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)
Copy
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)

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

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