xpressengine / xe-core

XpressEngine 1.x
https://xe1.xpressengine.com
Other
89 stars 62 forks source link

XMLQueryParser에서 정규식 조건 구문 사용하기 #2415

Open largeden opened 4 years ago

largeden commented 4 years ago

안녕하세요. 가끔 기능이 아쉬워서 안타까운 마음에 그냥.. 현재 이걸 굳이 집어넣을 이유는 없지만 혹시나 괜찮다고 보여지면 한번 검토해주십사 하는 마음에 의견 개진해봅니다.

XE는 하나의 컬럼을 복수개를 검색할 수 있는 in 구문이 있지만 복수개의 부분 검색(정규식)을 할 수 있는 구문은 지원하지 않습니다.

XE가 지원하는 데이터베이스에서 복수개를 부분 검색(정규식) 가능한 조건 문

/* mysql */ 
where REGEXP 'apple|berry|orange'
/* mssql */ 
where like 'apple|berry|orange'
/* cubrid */ 
where REGEXP | RLIKE 'apple|berry|orange'

예를 들어 REGEXP란 이름으로 xmlquery를 정의한다면 아래와 같이 정규식을 사용한 부분 검색이 가능할 것입니다.

$obj->s_title =  'apple|berry|orange';
<condition operation="REGEXP" column="title" var="s_title" />

XE에 조건 문을 추가하는 방법은 아래의 함수에 값을 정의하는 걸로 끝납니다.

/classes/db/queryparts/condition/Condition.class.php show() getConditionPart()

특정 조건 문의 선언 값을 수정하려면 xmlquery의 아래 함수에서 제어 가능합니다. (하지만 like '% %' 와 같은 수정은 필요없는 형태라서 REGEXP의 조건은 필요가 없습니다.) /classes/xml/xmlquery/argument/ConditionArgument.class.php createConditionValue()


위 기능이 추가가 되면 아래 같은 검색을 xmlquery로 가능해집니다.

지금으로썬 다중 부분 검색을 위해 아래와 같이 개발 해야합니다.

$obj->s_value1 =  'apple';
$obj->s_value2 =  'berry';
$obj->s_value3 =  'orange';
<condition operation="like" column="title" var="s_title1" />
<condition operation="like" column="title" var="s_title2" pipe="or" />
<condition operation="like" column="title" var="s_title3" pipe="or" />
largeden commented 4 years ago

오해가 있을 수 있어서.. 다중 부분 검색이란 이야기는 아래와 같은 검색을 의미합니다.

https://www.google.com/search?q=apple+berry+orange&oq=apple+berry+orange&aqs=chrome..69i57j0.1411j0j7&sourceid=chrome&ie=UTF-8