포럼
확장변수 checkbox 값에 대한 검색 관련해서..
2014.02.25 18:23
사용자정의로 checkbox 를 사용할 경우
기본값을, 영등포3동,영등포1동,영등포,영등포2동 이라고 정하고
글을 저장했다고 생각해볼께요..
예를들어 입력된 자료가 총 7가지일 경우
checkbox 는 복수개시 |@| 가 중간에 들어가서 저장이 되죠 (이상하게 나와서 공백을 넣어두었습니다)
1) 영등포
2) 영등포1동| @ |영등포2동
3) 영등포| @ |영등포2동
4) 영등포1동| @ |영등포| @ |영등포2동
5) 영등포3동| @ |영등포1동| @ |영등포
6) 영등포3동| @ |영등포1동
7) 영등포1동
이렇게 사용자정의로 글이 저장이 되어있는다고 보고.
검색어가 '영등포' checkbox 인걸로 검색문을 짜고픈데..
정확히 영등포 만 뽑아야하는거예요. 영등포1동이나 영등포2동, 영등포3동 등은 안 뽑히고
그냥 like 로 처리하면 다 뽑혀버리니까 안 되고.
query 문의 조건을 어떻게 짜야.. 정확히 영등포 를 뽑을 수 있을까요?
이런게 여러개가 될 수도 있기에 세가지 케이스로 나눠 query 롤 돌리거나 하는 형태는 한계가 있고요..
제가 모르는 mysql 구문들이 있을 수도 있을듯해서 여쭤봅니다.
참고로 제가 예전에 썼던 방법은..
아예 DB에 저장될때.. |@| ~ |@| 를 앞뒤에 무조건 강제로 붙여서 저장을 하는거였어요. 한개만 선택한 경우에도
그리고 검색시 아예 | @ |영등포| @ | 이렇게 검색해버리면 정확하게 검색이 되거든요
다만 이 경우 문제가 DB 자체에 입력되는걸 건들여버려야하는거예요.
중간에 확장변수 형태를 바꾼다든지할때도 문제고
확장변수 입력형식, 출력형식 쪽도 다 맞춰서 고쳐둬야하고..
기존에 자료가 들어가있던 상황이면 결국 DB 를 다 고쳐둬야하고.. DB자체를 건드려야한다는게 부담스러워서요
DB에 직접 |@| 를 앞뒤에 붙여저장하는게 아니라,
query 에서 칼럼대상값 자체에 |@|~|@| 를 임시로 부여해서 그 상태로 equal 시킬 수 있도록 query 문을 짤 수 있나요?
(제가 mysql query 를 깊숙이 잘 아는게 아니여서.. )
고민해보신 분이 분명 계실듯해서.. 혹시나 싶어 의견나눕니다 ^^
댓글 10
-
투씨
2014.02.25 22:31
-
sejin7940
2014.02.26 09:00
우선 답변 감사드립니다 ^^
단순히 저렇게 구현이 안 될꺼예요
그럴려면 해당 칼럼에 |@| 가 몇번 들어가는지를 먼저 검토해야할거예요
게다가 해당 칼럼에 대해 '영등포' 와 '영등포1동' 의 OR 를 검색하는 경우라든지..
이런 칼럼 자체가 여러개일 경우 까지 다 감안하면 더 문제가 생기거든요 (다나와 같은 복잡한 검색형태시.. )
-
銀童
2014.02.26 10:01
LIKE %|@|영등포|@|% or
LIKE 영등포|@|% or
LIKE %|@|영등포 or
LIKE 영등포 면 되지 않나요?
concat 등을 사용하면 좀더 심플하게 만들수도있지만, XE 쿼리상에서는 저게 한계로 보입니다.
만약 여러개를 검색해야한다면 서브쿼리로 만들면 충분할꺼같은데요 :)
만약 XE 쿼리를 안쓰고 mysql 로 직접 날린다면
WHERE concat('|@|',`filed_name`,'|@|') like '%|@|영등포|@|%'
이렇게 하면 심플한데 ..
아마 안되겠지 우린
-
sejin7940
2014.02.26 10:56
제가 예시를 저렇게 써둬서 그런거고 (예시를 조금 잘 못 정했군요 ^^;;)
checkbox 에 1동영등포 라는 기본값도 하나 있다고 생각하면
영등포 검색시.. LIKE 영등포|@|% 에 걸려버리죠 ^^;;
아... concat 라는 query 구문이 있나보군요. (제 개발지식이 기본이 약한 실정형이다보니 ㅡㅡ;)
WHERE concat('|@|',`filed_name`,'|@|') like '%| @ |영등포| @ |%' 가 아마도 딱 제가 원하는거겠네요
XE 자체의 query xml 기반으로는 아직 안 될 수도 있지만.
당장 제가 쓰려는 부분에서는 모듈 기반임에도, 실제 XE xml 을 안 쓰고 query 를 검색상황에 맞게 그때그때
자동으로 query 문을 생성해서 구현하는거기에, query 자체로 되면 되거든요 ^^
은동님 감사드립니다!! ^^
-
銀童
2014.02.26 10:58
아니죠 1동 영등포는 걸리지 않습니다
LIKE 영등포|@|%는
앞에 %가 없으니까 1동영등포는 안걸리고 반드시 '시작할때' 영등포|@|로 시작하는게 걸리는거니깐요
LIKE 에서 %% 는 보통 검색시 * 랑 비슷하다고 보시면됩니다
*영등포|@|* 가 아니라
영등포|@|* 입ㄴ디ㅏ.
-
sejin7940
2014.02.26 11:06
아.. 제가 착각했네요 ^^;;
checkbox 중 하나의 항목을 검색할때 OR 문이 4개가 합쳐져야하는군요
그러면 하나의 칼럼에 대해 두 개 checkbox 의 합집합을 구하려면 4개짜리 OR 에 다시 크게 OR가 붙어야하니 8개짜리고
이게 굉장히 비효율적이 되겠군요 ^^;;;;
어쨋든 concat 은 큰 도움이 되었습니다 ^^
-
착한악마
2014.02.27 14:22
세진님 혹시 http://www.xpressengine.com/qna/22626670 알수 있을까 ^^
-
sejin7940
2014.02.28 09:01
기본값을 호출하는 함수가 따로 없어요
따라서 executeQuery 를 이용해 해당 DB 테이블에서 직접 찾아내거나
아니면, document.model.php 의 getExtraKeys 를 통해 해당 게시판의 모든 확장변수 설정을 구한 뒤
foreach 문을 돌리면서 원하는 확장변수의 기본값을 찾아내셔야합니다.
전 주로 후자쪽을 사용하죠. 기본값 외에 상세설명 등이 필요한 경우도 마찬가지입니다.
-
착한악마
2014.02.28 09:55
^^ 그렇군요 어쩐지 뒤져봐도 나오는 곳이 없더라고요.^^ 감사합니다.
상용화를 위해서는 db테이블 보다는 후자가 좋을듯합니다. 떙큐~~~역시 세진님이시네요.
-
착한악마
2014.02.28 10:05
ㅋㅋ 그냥 아래 구문을 돌려 볼걸 그랬습니다..쩝...ㅡㅡ;; 해보지도 않고 따로 있을거라는 생각에 저값에서 추출해야 겟네요. 감사요~~~ 답 찾음..ㅋㅋ
{@
$getExtraVars = $document->getExtraVars();
}
<!--@foreach($getExtraVars[2] as $key => $val)-->
<!--@if ($key == 'default') -->
{$val}
<!--@end-->
<!--@end-->
equal 영등포
like 영등포|@|
like_prefix 영등포
세개를 동시에 조건을 주면 안될려나요?...