DB불러오기 질문드립니다.

DB불러오기 질문드립니다.

QA

DB불러오기 질문드립니다.

본문

안녕하세요

회원 DB를 연동 하여

2단 select box를 활용하려 합니다.

https://sir.kr/yc5_tip/806

여기를 참고했습니다.

 

데이터는 g5_member 테이블에서 가져오구요

회원레벨이 4이고 mb_4 값에 따라 아이디가 나오게 하려 합니다.

 

3076732454_1634065235.5728.png이렇게요..

 

table구조

mb_4 mb_id
a test1
b test2
c test3
a test4
d test5

<?php
include_once('./_common.php');
    $sql = " select * from g5_member where mb_level = '4' and mb_4 != ''";
    $res = sql_query($sql);
    for ($i=0; $row = sql_fetch_array($res); $i++) {
          $nm[$i] = $row['mb_4'].'|1|'.$row['mb_id'].'|2|';
    }
?>

이렇게 하면 잘 나오긴하는데

1단 셀렉트 박스에서

a

b

c

d

이렇게 안나오고

3076732454_1634065465.6024.png

이렇게 나옵니다.ㅠ

DB에 쌓인 순서대로 나오더라구요..

 

그래서 group by로 해보니

mb_4 A값의 아이디가 하나 밖에 안나옵니다..

3076732454_1634065529.9333.png이런식으로요..

 

여기서 부터 도저히 모르겠습니다. ㅠ

전체 소스 적습니다.. 고수님들의 도움 부탁드립니다.ㅠㅠ

 


<?php
include_once('./_common.php');
    $sql = " select * from g5_member where mb_level = '4' and mb_4 != ''";
    $sql .= " group by mb_4";
    $res = sql_query($sql);
    for ($i=0; $row = sql_fetch_array($res); $i++) {
          $nm[$i] = $row['mb_4'].'|1|'.$row['mb_id'].'|2|';
    }
?>
 
<script type="text/javascript">
 function getCataAllId(cmd){
  cmd = eval(cmd);
  cmd2 = cmd +1;
  initCataID(cmd);
  var ch = "";
  for(var idx = 1; idx < cmd2; idx++){
      ch = ch + eval("document.f1.menu"+idx+".value") + "|"+idx+"|";
  }
  var v = 0;
  var temp = "";
  var tempv = "";
  var arg = "";
  for(var m = 0; m < menuArr.length; m ++) {
      arg = menuArr[m].substring(menuArr[m].indexOf("|"+cmd+"|")+3,menuArr[m].indexOf("|"+cmd2+"|")) ;
      temp = menuArr[m].substring(0, menuArr[m].indexOf("|"+cmd+"|")+3);
      if(temp == ch && tempv != arg ){
            v++;
            eval("document.f1.menu"+cmd2+".length = document.f1.menu"+cmd2+".length + 1");
            eval("document.f1.menu"+cmd2+".options["+v+"].value = arg ");
            eval("document.f1.menu"+cmd2+".options["+v+"].text  = arg ");
      }
      if(temp != ch){
          tempv = "";
      }else{
          tempv = menuArr[m].substring(menuArr[m].indexOf("|"+cmd+"|")+3,menuArr[m].indexOf("|"+cmd2+"|"));
      } 
  }
}
 
 function initCataID(cmd){
 cmd = eval(cmd);
  if(cmd == 1){
      document.f1.menu2.length = 1;
      document.f1.menu2.selectedIndex = 0;
  }
 }
</script>
<form name = 'f1' >
<select name = 'menu1' id='menu1' OnChange='javascript:getCataAllId(1)' class="select1">
 <option value="" selected>선택하세요.</option>
</select>
<select name = 'menu2' id='menu2' OnChange='javascript:gotomenu()' class="select2">
 <option value="" selected>선택하세요.</option>
</select>
</form>
<script type="text/javascript">
/* JSON encode, parse  */
var stuff = <?php echo json_encode($nm); ?>;
var str = JSON.stringify(stuff);
var menuArr = new Array();
      menuArr= JSON.parse(str);
var z1 = 0;
var temp1 = 0;
  initCataID(1);
  for(var m = 0; m < menuArr.length; m ++) {
      if ( menuArr[m].substring(0, menuArr[m].indexOf("|1|")) != temp1 ){
          document.f1.menu1.length =  document.f1.menu1.length + 1;
          document.f1.menu1.options[z1+1].value = menuArr[m].substring(0, menuArr[m].indexOf("|1|")) ;
          document.f1.menu1.options[z1+1].text = menuArr[m].substring(0, menuArr[m].indexOf("|1|")) ;
          temp1 = menuArr[m].substring(0, menuArr[m].indexOf("|1|"));
          z1++;
      }
      /*  index 1에 중복 제거입니다.  */
  }
</script>

 

 

이 질문에 댓글 쓰기 :

답변 2

말씀 하신것 처럼 하려면 위처럼 group by 를쓰시면 안됩니다 (중복되는것은 모두 제외합니다)

 

따라서

1. select box 2개 만들기 (mb_4 만 가져와서 group by 로 뿌려주는 셀렉트 박스 하나 , 하나는 빈값으로 둔 상태)

 

2. mb_4 선택시 onchange 를 통해 ajax 함수 호출 

3. ajax 함수에서 별도 페이지호출 (해당 페이지에서 mb_4 에 해당하는 회원 아이디를 가져와서 option 으로 html 을 만들어줍니다)

 

4. ajax return 부분에서 나온 결과값을 빈공백으로 있는 selectbox 에 add 처리시켜주셔야 합니다

답변을 작성하시기 전에 로그인 해주세요.
전체 123,529 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT