분할된 필드 value값 sql문 질문...

분할된 필드 value값 sql문 질문...

QA

분할된 필드 value값 sql문 질문...

본문

데이터 입력시에

 


<?
$ca_3 = explode("|",$ca[ca_3]); 
$ext3_00  = $ca_3[0]; 
$ext3_01  = $ca_3[1]; 
$ext3_02  = $ca_3[2]; 
$ext3_03  = $ca_3[3];
$ext3_04  = $ca_3[4];
$ext3_05  = $ca_3[5]; 
$ext3_06  = $ca_3[6]; 
$ext3_07  = $ca_3[7]; 
$ext3_08  = $ca_3[8]; 
$ext3_09  = $ca_3[9];
$ext3_10  = $ca_3[10];
?>
 
	<tr>
		<th scope="row" rowspan="3">업종</th>
		<th scope="row">숙박/대관</td>
		<td colspan="3">
		
			<div class="input"><input type="checkbox" name="ext3_00" value="호텔/컨벤션" id="ca_3_0" <?php if($ext3_00 == '호텔/컨벤션' ) echo 'checked="checked"'; ?>><label for="ca_3_0"> 호텔/컨벤션</label></div>
			<div class="input"><input type="checkbox" name="ext3_01" value="컨벤션" id="ca_3_1" <?php if($ext3_01 == '컨벤션' ) echo 'checked="checked"'; ?>><label for="ca_3_1"> 컨벤션</label></div>
			<div class="input"><input type="checkbox" name="ext3_02" value="리조트" id="ca_3_2" <?php if($ext3_02 == '리조트' ) echo 'checked="checked"'; ?>><label for="ca_3_2"> 리조트</label></div>
			<div class="input"><input type="checkbox" name="ext3_03" value="연수원" id="ca_3_3" <?php if($ext3_03 == '연수원' ) echo 'checked="checked"'; ?>><label for="ca_3_3"> 연수원</label></div>
			<div class="input"><input type="checkbox" name="ext3_04" value="유스호스텔" id="ca_3_4" <?php if($ext3_04 == '유스호스텔' ) echo 'checked="checked"'; ?>><label for="ca_3_4"> 유스호스텔</label></div>
			<div class="input"><input type="checkbox" name="ext3_05" value="수련원" id="ca_3_5" <?php if($ext3_05 == '수련원' ) echo 'checked="checked"'; ?>><label for="ca_3_5"> 수련원</label></div><br>
 
			<div style="clear:both;"></div>
 
			<div class="input"><input type="checkbox" name="ext3_06" value="세미나/회의장" id="ca_3_6" <?php if($ext3_06 == '세미나/회의장' ) echo 'checked="checked"'; ?>><label for="ca_3_6"> 세미나/회의장</label></div>
			<div class="input"><input type="checkbox" name="ext3_07" value="아트홀공연장" id="ca_3_7" <?php if($ext3_07 == '아트홀공연장' ) echo 'checked="checked"'; ?>><label for="ca_3_7"> 아트홀/공연장</label></div>
			<div class="input"><input type="checkbox" name="ext3_08" value="회관" id="ca_3_8" <?php if($ext3_08 == '회관' ) echo 'checked="checked"'; ?>><label for="ca_3_8"> 회관</label></div>
			<div class="input"><input type="checkbox" name="ext3_09" value="대학교" id="ca_3_9" <?php if($ext3_09 == '대학교' ) echo 'checked="checked"'; ?>><label for="ca_3_9"> 대학교</label></div>
			<div class="input"><input type="checkbox" name="ext3_10" value="소극장" id="ca_3_10" <?php if($ext3_10 == '소극장' ) echo 'checked="checked"'; ?>><label for="ca_3_10"> 소극장</label></div>
		
		</td>
	</tr> 

 

이렇게 분할 된 값으로 체크값이 저장되는데요. 저장 후에 

 

목록에서 ca_3 에 "호텔/컨벤션" 에 체크된 걸 sql 로 db에서 불러오려는데

분할된거라 그런지 출력이 되질 않는 문제가 있네요..

 


$sql  = " select * from {$g5['g5_shop_category_table']} where ca_3 = '호텔/컨벤션' order by ca_id desc";

 

분할된 필드인 ca_3 에서 "호텔/컨벤션" ​에 체크된 걸 불러오려면 어떻게 수정해줘야 할까요.

 

 

이 질문에 댓글 쓰기 :

답변 3

where 절에 ca_3 like '%호텔/컨벤션%' ​나 instr(ca_3,'호텔/컨벤션') 이렇게 바꿔보세요.

그런데 선택값에  "호텔/컨벤션" 과 "컨벤션" 이 존재하는데요.
컨벤션으로 찾으면 중복되서 같이 나오더라구요.
"호텔/컨벤션" 이 선택되어졌으면 완전히 일치하는.."호텔/컨벤션" 만 나오고 "컨벤션"이 선택되어졌으면 "컨벤션"만
나오게는 어떻게 해야 하나요..?^^

저장을 ext3_03 필드에 하신것 같은데​ 

ext3_03 = "호텔/컨벤션" 

이렇게 불러오면 되지 않나요?

아.. 제가 너무 설렁설렁 보고 답변을 드렸군요;;

mysql에서도 정규식이 되는 모양입니다. (저는 아직 사용해본적이 없어서.. ^^;)

컨벤션인 경우에만

ca_3 regexp '[^\/]컨벤션'

이런식으로 구분하여 사용하면 가능할듯 합니다.

직접 문자열을 입력해서 쿼리날리는게 아니라 변수를 적용해서 하는거라면 일률적으로

ca_3 regexp '[^\/]".$변수명."'​ 이런식으로 해야겠죠.

input태그의 name을 보니 저장하실때 일일이 문자열을 붙이시는건가요?

여튼 문자열들을 다 병합하고 마지막에 앞뒤에 | 문자열을 추가해서 간단하게 하는 방법도 있습니다.

(왠지 정규식은 아무래도 부하가 더 일어날거 같은 기분에..)

이를테면 ext3_00~$ext3_10 까지 병합한 문자열이 $ext3 이라면

병합후에 if($ext3) $ext3 = '|'.$ext3.'|'; 추가하시고 where절에서는

ca_3 like '%|호텔/컨벤션|%' ​나 instr(ca_3,'|호텔/컨벤션​|') 

ca_3 like '%|컨벤션|%' ​나 instr(ca_3,'|컨벤션​|')

이런식으로 하는거죠. 변수를 사용해도 마찬가지입니다.

ca_3 like '%|".$변수명."|%' ​나 instr(ca_3,'|".$변수명."​​|')

아 제가 설명을 잘못드린듯 하네요..
데이터를  저장 시키는 페이지에서 체크박스로..
아래처럼

<div class="input"><input type="checkbox" name="ext3_00" value="호텔/컨벤션" id="ca_3_0" <?php if($ext3_00 == '호텔/컨벤션' ) echo 'checked="checked"'; ?>><label for="ca_3_0"> 호텔/컨벤션</label></div>
<div class="input"><input type="checkbox" name="ext3_01" value="컨벤션" id="ca_3_1" <?php if($ext3_01 == '컨벤션' ) echo 'checked="checked"'; ?>><label for="ca_3_1"> 컨벤션</label></div>
<div class="input"><input type="checkbox" name="ext3_02" value="리조트" id="ca_3_2" <?php if($ext3_02 == '리조트' ) echo 'checked="checked"'; ?>><label for="ca_3_2"> 리조트</label></div>
<div class="input"><input type="checkbox" name="ext3_03" value="연수원" id="ca_3_3" <?php if($ext3_03 == '연수원' ) echo 'checked="checked"'; ?>><label for="ca_3_3"> 연수원</label></div>
<div class="input"><input type="checkbox" name="ext3_04" value="유스호스텔" id="ca_3_4" <?php if($ext3_04 == '유스호스텔' ) echo 'checked="checked"'; ?>><label for="ca_3_4"> 유스호스텔</label></div>
<div class="input"><input type="checkbox" name="ext3_05" value="수련원" id="ca_3_5" <?php if($ext3_05 == '수련원' ) echo 'checked="checked"'; ?>><label for="ca_3_5"> 수련원</label></div><br>

<div style="clear:both;"></div>

<div class="input"><input type="checkbox" name="ext3_06" value="세미나/회의장" id="ca_3_6" <?php if($ext3_06 == '세미나/회의장' ) echo 'checked="checked"'; ?>><label for="ca_3_6"> 세미나/회의장</label></div>
<div class="input"><input type="checkbox" name="ext3_07" value="아트홀공연장" id="ca_3_7" <?php if($ext3_07 == '아트홀공연장' ) echo 'checked="checked"'; ?>><label for="ca_3_7"> 아트홀/공연장</label></div>
<div class="input"><input type="checkbox" name="ext3_08" value="회관" id="ca_3_8" <?php if($ext3_08 == '회관' ) echo 'checked="checked"'; ?>><label for="ca_3_8"> 회관</label></div>
<div class="input"><input type="checkbox" name="ext3_09" value="대학교" id="ca_3_9" <?php if($ext3_09 == '대학교' ) echo 'checked="checked"'; ?>><label for="ca_3_9"> 대학교</label></div>
<div class="input"><input type="checkbox" name="ext3_10" value="소극장" id="ca_3_10" <?php if($ext3_10 == '소극장' ) echo 'checked="checked"'; ?>><label for="ca_3_10"> 소극장</label></div>

저장이 되구요.

다른 페이지에서 상위 체크된 항목에 맞는것을 리스트로 출력을 하는 중이거든요..

"호텔/컨벤션" 과 "컨벤션" 이 문자가 겹쳐서 "컨벤션" 체크 되어 출력되는 리스트에.."호텔/컨벤션" 체크 된것도
같이 나와서 여쭤보는 겁니다.."컨벤션"에 체크 된 리스트가 출력될때는 "호텔/컨벤션" 이 항목에 체크된 리스트도
같이 나오더라구요.. 그래서 완전 일치하는 단어에 해당하는 리스트만 출력이 되어야 "호텔/컨벤션" 와 "컨벤션"
이 리스트가 따로 나오니까요..

예 말씀하신 내용을 상정해서 답변드린건데.. 위의 where절로 해결이 안되던가요?
정규식으로 해도 '컨벤션'을 찾을때 '호텔/컨벤션'이 같이 검색되지 않을거고..
다른 방법으로 아랫쪽에 설명드린건 저장할때 앞뒤에 | 문자를 붙여서 저장하고 검색할때 역시 검색문자열 앞뒤에 | 문자를 붙여서 하면 된다고 말씀드린거에요.
$ca_3 = explode("|",$ca[ca_3]);
이걸 보면 저장할때 |문자를 구분자로 하나로 병합해서 저장하셨을거고.. 그냥 컨벤션만 검색하면 호텔/컨벤션도 딸려올테니 저장시 앞뒤에 | 붙여서 저장하고 검색할때도 '|컨벤션|' 으로 검색하면 해결될겁니다. 저도 비슷한 단어가 들어가는 경우를 방지하기 위해 실제로 이 방법을 많이 사용합니다.

참고로 제가 '저장할때'라고 말하는 부분은 질문하신 페이지에서 폼 전송이 일어나서 submit되어 db에 내용을 저장하는 php코드가 들어있는 부분을 말한겁니다.
위 질문하신 페이지는 저장하는게 아니라 입력하는 거죠.

감사합니다 . 덕분에 힌트를 얻어 아무튼 해결이 되었습니다.
그냥 검색하는 페이지에서 "|컨벤션|" 만 해주니까 "호텔/컨벤션" 과 "컨벤션" 이 따로 인식이 되어
각각 인식해서 출력이 되네요^^ 감사합니다.

답변을 작성하시기 전에 로그인 해주세요.
전체 728
QA 내용 검색
filter #sql ×

회원로그인

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