DB불러오기 질문드립니다.
본문
안녕하세요
회원 DB를 연동 하여
2단 select box를 활용하려 합니다.
여기를 참고했습니다.
데이터는 g5_member 테이블에서 가져오구요
회원레벨이 4이고 mb_4 값에 따라 아이디가 나오게 하려 합니다.
이렇게요..
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
이렇게 안나오고
이렇게 나옵니다.ㅠ
DB에 쌓인 순서대로 나오더라구요..
그래서 group by로 해보니
mb_4 A값의 아이디가 하나 밖에 안나옵니다..
이런식으로요..
여기서 부터 도저히 모르겠습니다. ㅠ
전체 소스 적습니다.. 고수님들의 도움 부탁드립니다.ㅠㅠ
<?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 처리시켜주셔야 합니다
답변을 작성하시기 전에 로그인 해주세요.