|
|
|
1. XML Query 사용법 (current)
|
SMaker |
2011.05.10 14:09:31 |
|
|
|
복원
<div class="eArea xe_content xe_dr_txt"><p><a href="http://doc.xpressengine.com/classXmlQueryParser.html" target="_blank">http://doc.xpressengine.com/classXmlQueryParser.html</a> (클래스 구조)</p></div><ul class="toc"><li class="toc3"><a href="#1249368742400-1">개요</a></li><li class="toc3"><a href="#1249368742400-2">사용법</a></li><li class="toc3"><a href="#h1249628444840">XML sample</a></li><li class="toc3"><a href="#Selectquery%EC%98%88%EC%A0%9C">Select query 예제</a></li><li class="toc3"><a href="#h1249627751923">Join Select 예제</a></li><li class="toc3"><a href="#h1249627778964">Letf Join Select 예제</a></li><li class="toc3"><a href="#1249368742400-5">Insert 예제</a></li><li class="toc3"><a href="#1249368742400-6">update 예제</a></li><li class="toc3"><a href="#1249368742400-7">delete 예제</a></li><li class="toc3"><a href="#1249368742400-7">Select Click Count 예제</a></li></ul><h3 id="1249368742400-1">개요</h3><div class="eArea xe_content xe_dr_txt"><ol>
<li>XpressEngine는 query문을 직접 사용하지 않습니다.</li>
<li>이는 다양한 DBMS를 지원하기 위해서입니다.</li>
<li>XML Query문의 확장자는 .xml 입니다.</li></ol></div><h3 id="1249368742400-2">사용법</h3><div class="eArea xe_content xe_dr_txt"><p>모듈 또는 애드온, 플러그인등에서 아래와 같이 사용할 수 있습니다.<br><br> 1. $args->name = "zero";<br> 2. $output = executeQuery("member.getMemberInfo", $args);<br><br>XML Query를 호출하여 실제 DB의 데이터를 받거나 조작하기 위해서 사용되는 executeQuery() 함수는 DB::executeQuery()의 alias입니다.<br><br> 1. function executeQuery($xml_query_name, $args = null);<br><br>첫번째 인자로 실행하고자 하는 xml query의 이름을 받게 됩니다.<br>이름은 모듈명.쿼리ID 로 이루어집니다.<br><br>$args는 null일수도 있고 해당 xml query에서 필요시 stdclass의 variables type으로 변수의 key, value를 설정후 인자로 넘기게 됩니다.<br><br>결과는 Object class의 객체로 return 됩니다.<br>쿼리 실패는 $output->toBool()이 false일 경우이고 true라면 쿼리는 정상적으로 실행이 된 것을 의미합니다.<br>select문의 결과 데이터는 $output->data 변수에 담겨져 return 됩니다.</p></div><h3 id="h1249628444840">XML sample</h3><div class="eArea xe_content xe_dr_txt"><ol class="code">
<li><query id="쿼리아이디" action="select|update|delete|insert"><br> <tables><br> <table name="원테이블이름" alias="alias" /><br> ...<br> </tables><br><br> <columns><br> <column name="컬럼명" alias="alias" /><br> ...<br> </columns><br><br> <conditions><br> <condition operation="조건걸" column="Column명" var="변수명" filter="필터형식" default="기본값" notnull="notnull" minlength="최소길이" maxlength="최대길이" pipe="연결연산자" /><br> ...<br> <group pipe="연결연산자"><br> <condition operation="조건걸" column="Column명" var="변수명" filter="필터형식" default="기본값" notnull="notnull" minlength="최소길이" maxlength="최대길이" pipe="연결연산자" /><br> ...<br> </group><br> ...<br> </conditions><br><br> <navigation><br> <index var="이름" default="기본값" order="desc|asc" /><br> <list_count var="변수명" default="기본값" /><br> <page_count var="변수명" default="기본값" /><br> <page var="변수명" default="변수명" /><br> </navigation><br><br> <groups><br> <group column="GroupBy 대상" /><br> </groups><br></query></li></ol></div><div class="eArea xe_content xe_dr_txt eFocus"><ul><li>
<p><query> 의 attribute</p>
<ul><li>id : 쿼리를 찾을 수 있는 아이디입니다. module.query_id 로 query xml 파일을 찾고 사용하게 됩니다.<br>action : select, update, delete, insert 4가지 종류가 있습니다.</li></ul>
<p> </p></li><li><tables>
<ul><li>테이블 조인시 여러개의 <table> 을 사용할 수 있습니다.<br>name : 원테이블 명 (제로보드XE에서 prefix는 무시) alias : join또는 다른 용도로 원테이블명을 바꾸어 사용할 경우</li></ul></li><li><columns>
<ul><li>처리하고자 하는 컬럼명을 입력하시면 됩니다. name : 컬럼명 alias : 다른 이름으로 바꾸어 결과를 만들고자 할 경우 지정</li></ul></li><li><conditions>
<ul><li>조건절을 구성합니다.</li><li>조건절을 여러개의 그룹으로 사용하고자 할 때에는 <group> 태그를 이용해서 묶어 주실 수 있습니다.</li></ul></li><li><group> ... </group>
<ul><li>조건절을 그룹으로 사용할 경우 pipe="and|or" 를 이용하여 그룹끼리의 조건을 지정할 수 있습니다.</li></ul></li><li><condition>
<ul><li>
<p>operation : 아래와 같은 연산자로 처리가 됩니다.</p>
<div style="background-color: rgb(249, 249, 216);" class="section">equal : column = (var|default)<br>more : column >= (var|default)<br>excess : column > (var|default)<br>less : column <= (var|default)<br>below : column < (var|default)<br>notequal : column != (var|default)<br>notnull : column is not null<br>null : column is null<br>like_prefix : column like '%var|default'<br>like_tail : column like 'var|default%'<br>like : column like '%var|default%'<br>in : column in (var|default)<br>notin : column not in (var|default)<br></div>
<p> </p></li><li>column : 컬럼명을 지정할 수 있습니다.</li><li>var : executeQuery()함수에서 2번째 인자의 key값을 지정할 수 있습니다.</li><li>
<p>filter : var 값의 조건을 filtering합니다. 아래와 같은 filter를 지원합니다.</p>
<div style="background-color: rgb(249, 249, 216);" class="section">email, email_address : 메일 형식<br>homepage : http|https://등의 홈페이지 형식<br>userid, user_id : 제로보드XE의 사용자 아이디 형식 (첫글자는 영문, 2번째부터는 숫자+영문+_)<br>number : 숫자만 허용<br>alpha : 영문자만 허용<br>alpha_number : 숫자+영문자만 허용</div></li><li>
<p>default : var값이 null일 경우 default값으로 대체됩니다. 아래와 같은 함수값을 가질 수도 있습니다.</p>
<div style="background-color: rgb(249, 249, 216);" class="section">ipaddress() : 접속자의 ip 주소<br>unixtime() : unix time (php의 time()함수)<br>curdate() : YYYYMMDDHHIISS<br>plus(int count) : column = column + count<br>minus(int count) : column = column - count</div></li><li>notnull : not null check를 하게 됩니다. minlength : 최소길이 체크 maxlength : 최대길이 체크 pipe : and|or등의 조건을 지정할 수 있습니다.</li></ul></li><li>
<p><navigation> : navigation은 정렬순서(order by) 또는 페이징을 지원합니다.</p>
<ul><li>
<p><index> 정렬할 컬럼과 정렬방법을 지정할 수 있습니다.</p>
<div style="background-color: rgb(249, 249, 216);" class="section">var : 대상 컬럼명을 담은 변수명<br>default : var값이 없을 경우 기본으로 정렬할 컬럼명 지정<br>order : asc|desc</div></li><li>
<p><list_count> 페이징을 한 결과를 받을 수 있습니다.</p>
<div style="background-color: rgb(249, 249, 216);" class="section">var : 목록의 rows를 지정<br>default : var값이 없을 경우 기본 rows 값</div></li><li>
<p><page_count> 페이징 계산시에 하단 페이지 네비게이션의 수를 지정</p>
<div style="background-color: rgb(249, 249, 216);" class="section">var : 페이징 네비게이션의 수<br>default : var값이 없을 경우 기본 페이징 네비게이션의 수</div></li><li>
<p><page> 현재 몇번째 페이지인지를 지정할 수 있습니다.</p>
<div style="background-color: rgb(249, 249, 216);" class="section">var : 현재 몇번째 페이지인지를 지정할 변수<br>default : var값이 지정되지 않았을 경우 페이지 번호</div></li></ul>
<p> </p></li><li><groups> : group by 절을 사용할 수 있습니다.</li></ul></div><h3 id="Selectquery예제">Select query 예제</h3><div class="eArea xe_content xe_dr_txt"><ul>
<li>
<p>member.getMemberList : member테이블에서 특정 조건을 가진 회원들을 페이징을 하면서 select</p>
<ol class="code">
<li><query id="getMemberList" action="select"><br><tables><br> <table name="member" /><br></tables></li>
<li><br><columns><br> <column name="*" /><br></columns></li>
<li><br><conditions><br> <condition operation="equal" column="is_admin" var="is_admin" /><br> <condition operation="equal" column="denied" var="is_denied" pipe="and" /><br> <group pipe="and"><br> <condition operation="like" column="user_id" var="s_user_id" /><br> <condition operation="like" column="user_name" var="s_user_name" pipe="or" /><br> <condition operation="like" column="nick_name" var="s_nick_name" pipe="or" /><br> <condition operation="like" column="email_address" var="s_email_address" pipe="or" /><br> <condition operation="like_prefix" column="regdate" var="s_regdate" pipe="or" /><br> <condition operation="like_prefix" column="last_login" var="s_last_login" pipe="or" /><br> </group><br></conditions><br><br><navigation><br> <index var="sort_index" default="member_srl" order="desc" /><br> <list_count var="list_count" default="20" /><br> <page_count var="page_count" default="10" /><br> <page var="page" default="1" /><br></navigation><br></query></li></ol></li>
<li>document.getMonthlyArchivedList : 모듈을 '년월'일을 기준으로 group by 한 결과를 가져옴</li></ul></div><div class="eArea xe_content xe_dr_txt"><ol style="margin-left: 2em;" class="code">
<li><query id="getMonthlyArchivedList" action="select"><br><tables><br> <table name="documents" /><br></tables><br><br><columns><br> <column name="substr(regdate,1,6)" alias="month"/><br> <column name="count(*)" alias="count" /><br></columns><br><br><conditions><br> <condition operation="in" column="module_srl" var="module_srl" filter="number" /><br></conditions><br><br><groups><br> <group column="substr(regdate,1,6)" /><br></groups><br></query></li></ol></div><h3 id="h1249627751923">Join Select 예제</h3><div class="eArea xe_content xe_dr_txt"><p>document.getTrashList 예제입니다.</p></div><div class="eArea xe_content xe_dr_txt"><p></p>
<div><query id="getTrashList" action="select"></div>
<div> <tables></div>
<div> <table name="documents" /></div>
<div> <table name="document_trash" /></div>
<div> </tables></div>
<div> <columns></div>
<div> <column name="documents.*" /></div>
<div> <column name="document_trash.trash_srl" alias="trash_srl" /></div>
<div> <column name="document_trash.module_srl" alias="module_srl" /></div>
<div> <column name="document_trash.trash_date" alias="trash_date" /></div>
<div> <column name="document_trash.description" alias="trash_description" /></div>
<div> <column name="document_trash.ipaddress" alias="trash_ipaddress" /></div>
<div> <column name="document_trash.user_id" alias="trash_user_id" /></div>
<div> <column name="document_trash.user_name" alias="trash_user_name" /></div>
<div> <column name="document_trash.nick_name" alias="trash_nick_name" /></div>
<div> <column name="document_trash.member_srl" alias="trash_member_srl" /></div>
<div> </columns></div>
<div> <conditions></div>
<div> <condition operation="equal" column="document_trash.document_srl" default="documents.document_srl" notnull="notnull" /></div>
<div> <condition operation="in" column="document_trash.module_srl" var="module_srl" filter="number" pipe="and" /></div>
<div> <condition operation="equal" column="document_trash.member_srl" var="member_srl" filter="number" pipe="and" /></div>
<div><br></div>
<div> <group pipe="and"></div>
<div> <condition operation="like" column="documents.title" var="s_title" /></div>
<div> <condition operation="like" column="documents.content" var="s_content" pipe="or" /></div>
<div> <condition operation="like" column="documents.user_name" var="s_user_name" pipe="or" /></div>
<div> <condition operation="like" column="documents.user_id" var="s_user_id" pipe="or" /></div>
<div> <condition operation="like" column="documents.nick_name" var="s_nick_name" pipe="or" /></div>
<div> <condition operation="like" column="documents.email_address" var="s_email_addres" pipe="or" /></div>
<div> <condition operation="like" column="documents.homepage" var="s_homepage" pipe="or" /></div>
<div> <condition operation="like" column="documents.tags" var="s_tags" pipe="or" /></div>
<div> <condition operation="equal" column="documents.is_secret" var="s_is_secret" pipe="or" /></div>
<div> <condition operation="equal" column="documents.member_srl" var="s_member_srl" pipe="or" /></div>
<div> <condition operation="more" column="documents.readed_count" var="s_readed_count" pipe="or" /></div>
<div> <condition operation="more" column="documents.voted_count" var="s_voted_count" pipe="or" /></div>
<div> <condition operation="more" column="documents.comment_count" var="s_comment_count" pipe="or" /></div>
<div> <condition operation="more" column="documents.trackback_count" var="s_trackback_count" pipe="or" /></div>
<div> <condition operation="more" column="documents.uploaded_count" var="s_uploaded_count" pipe="or" /></div>
<div> <condition operation="like_prefix" column="documents.regdate" var="s_regdate" pipe="or" /></div>
<div> <condition operation="like_prefix" column="documents.last_update" var="s_last_update" pipe="or" /></div>
<div> <condition operation="like_prefix" column="documents.ipaddress" var="s_ipaddress" pipe="or" /></div>
<div> </group></div>
<div><br></div>
<div><br></div>
<div> </conditions></div>
<div> <navigation></div>
<div> <index var="sort_index" default="documents.list_order" order="order_type" /></div>
<div> <list_count var="list_count" default="20" /></div>
<div> <page_count var="page_count" default="10" /></div>
<div> <page var="page" default="1" /></div>
<div> </navigation></div>
<div></query></div>
<p></p></div><h3 id="h1249627778964">Letf Join Select 예제</h3><div class="eArea xe_content xe_dr_txt"><p></p>
<div><query id="getDocumentsExtraVars" action="select"></div>
<div> <tables></div>
<div> <table name="document_extra_keys" alias="extra_keys" /></div>
<div> <table name="document_extra_vars" alias="extra_vars" type="left join"></div>
<div> <conditions></div>
<div> <condition operation="equal" column="extra_keys.module_srl" default="extra_vars.module_srl" /></div>
<div> <condition operation="in" column="extra_vars.document_srl" var="document_srl" pipe="and" /></div>
<div> <condition operation="equal" column="extra_keys.eid" default="extra_vars.eid" pipe="and" /></div>
<div> </conditions></div>
<div> </table></div>
<div> </tables></div>
<div> <columns></div>
<div> <column name="extra_keys.module_srl" alias="module_srl" /></div>
<div> <column name="extra_keys.var_name" alias="name" /></div>
<div> <column name="extra_keys.var_type" alias="type" /></div>
<div> <column name="extra_keys.var_is_required" alias="is_required" /></div>
<div> <column name="extra_keys.var_search" alias="search" /></div>
<div> <column name="extra_keys.var_default" alias="default" /></div>
<div> <column name="extra_keys.var_desc" alias="desc" /></div>
<div> <column name="extra_keys.var_idx" alias="idx" /></div>
<div> <column name="extra_vars.document_srl" alias="document_srl" /></div>
<div> <column name="extra_vars.lang_code" alias="lang_code" /></div>
<div> <column name="extra_vars.value" alias="value" /></div>
<div> <column name="extra_keys.eid" alias="eid" /></div>
<div> </columns></div>
<div> <navigation></div>
<div> <index var="sort_index" default="extra_keys.var_idx" order="asc" /></div>
<div> </navigation></div>
<div></query></div>
<div><br></div>
<p></p></div><h3 id="1249368742400-5">Insert 예제</h3><div class="eArea xe_content xe_dr_txt"><ul>
<li>
<p>document.insertCategory : 문서 카테고리 추가</p>
<ol class="code">
<li><query id="insertCategory" action="insert"><br><tables><br> <table name="document_categories" /><br></tables><br><br><columns><br> <column name="category_srl" var="category_srl" filter="number" notnull="notnull" /><br> <column name="module_srl" var="module_srl" filter="number" default="0" notnull="notnull" /><br> <column name="title" var="title" notnull="notnull" minlength="2" maxlength="250" /><br> <column name="document_count" var="document_count" default="0" /><br> <column name="regdate" var="regdate" default="curdate()" /><br> <column name="last_update" var="last_update" default="curdate()" /><br> <column name="list_order" var="list_order" default="0" /><br></columns><br></query></li></ol></li></ul></div><h3 id="1249368742400-6">update 예제</h3><div class="eArea xe_content xe_dr_txt"><ul>
<li>
<p>document.updateCategory : 특정 카테고리의 제목이나 순서, 최근 수정일을 변경</p>
<ol class="code">
<li><query id="updateCategory" action="update"><br><tables><br> <table name="document_categories" /><br></tables><br><br><columns><br> <column name="title" var="title" /><br> <column name="list_order" var="list_order" /><br> <column name="last_update" var="last_update" default="curdate()" /><br></columns><br><br><conditions><br> <condition operation="equal" column="category_srl" var="category_srl" filter="number" notnull="notnull" /><br></conditions><br></query></li></ol></li></ul></div><h3 id="1249368742400-7">delete 예제</h3><div class="eArea xe_content xe_dr_txt"><ul>
<li>
<p>document.deleteCategory : 특정 카테고리를 삭제</p>
<ol class="code">
<li><query id="deleteCategory" action="delete"><br><tables><br> <table name="document_categories" /><br></tables><br><br><conditions><br> <condition operation="equal" column="category_srl" var="category_srl" filter="number" notnull="notnull" /><br></conditions><br></query></li></ol></li></ul></div><h3 id="1249368742400-7">Select Click Count 예제</h3><div class="eArea xe_content xe_dr_txt"><p>Select 시 조회수 등의 정수의 숫자 컬럼을 +1 하는 기능입니다.</p>
<p>Cubrid의 경우에는 incr()이라는 함수를 사용하고 다른 데이타베이스의 경우 해당 컬럼을 Select후 Update 합니다.</p>
<p>XE Core 1.2.6 이상 버전에서 지원하고 있습니다.</p>
<p></p>
<p>document.getDocument XML Query에 Click Count 를 적용해 본 예제입니다.</p>
<p>select시 정수 숫자 컬럼 node에 attribute는 click_count, 값은 Argument로 매핑되는 변수명을 기입합니다.</p>
<p></p></div><div class="eArea xe_content xe_dr_txt"><p><query id="getDocument" action="select"><br> <tables><br> <table name="documents" /><br> </tables></p>
<p> <columns><br> <column name="document_srl" /><br> <column name="module_srl" /><br> <column name="category_srl" /><br> <column name="lang_code" /><br> <column name="is_notice" /><br> <column name="is_secret" /><br> <column name="title" /><br> <column name="title_bold" /><br> <column name="title_color" /><br> <column name="content" /><br> <column name="readed_count" <b><span style="color: rgb(255, 0, 0);">click_count="incr_readed_count"</span></b>/><br> <column name="voted_count" /><br> <column name="blamed_count" /><br> <column name="comment_count" /><br> <column name="trackback_count" /><br> <column name="uploaded_count" /><br> <column name="password" /><br> <column name="user_id" /><br> <column name="user_name" /><br> <column name="nick_name" /><br> <column name="member_srl" /><br> <column name="email_address" /><br> <column name="homepage" /><br> <column name="tags" /><br> <column name="extra_vars" /><br> <column name="regdate" /><br> <column name="last_update" /><br> <column name="last_updater" /><br> <column name="ipaddress" /><br> <column name="list_order" /><br> <column name="update_order" /><br> <column name="allow_comment" /><br> <column name="lock_comment" /><br> <column name="allow_trackback" /><br> <column name="notify_message" /><br> </columns><br> <conditions><br> <condition operation="equal" column="document_srl" var="document_srl" filter="number" notnull="notnull" /><br> </conditions><br></query></p>
<p></p></div><div class="eArea xe_content xe_dr_txt"><p>click_count 의 매핑변수 값이 true이면 해당 컬럼을 +1 증가합니다.</p></div><div class="eArea xe_content xe_dr_txt"><p></p>
<div>$args->document_srl = $this->document_srl;</div>
<div>$args-><span style="color: rgb(255, 0, 0);">incr_readed_count</span> =<span style="color: rgb(255, 0, 0);"> true</span>;</div>
<div>$output = executeQuery('document.getDocument', $args);</div>
<div><br></div>
<p></p></div>
|
라르게덴 |
2011.02.20 00:28:28 |
|
|
|
복원
<div class="eArea xe_content xe_dr_txt"><p><a href="http://doc.xpressengine.com/classXmlQueryParser.html" target="_blank">http://doc.xpressengine.com/classXmlQueryParser.html</a> (클래스 구조)</p></div><ul class="toc"><li class="toc3"><a href="#1249368742400-1">개요</a></li><li class="toc3"><a href="#1249368742400-2">사용법</a></li><li class="toc3"><a href="#h1249628444840">XML sample</a></li><li class="toc3"><a href="#Selectquery%EC%98%88%EC%A0%9C">Select query 예제</a></li><li class="toc3"><a href="#h1249627751923">Join Select 예제</a></li><li class="toc3"><a href="#h1249627778964">Letf Join Select 예제</a></li><li class="toc3"><a href="#1249368742400-5">Insert 예제</a></li><li class="toc3"><a href="#1249368742400-6">update 예제</a></li><li class="toc3"><a href="#1249368742400-7">delete 예제</a></li><li class="toc3"><a href="#1249368742400-7">Select Click Count 예제</a></li></ul><h3 id="1249368742400-1">개요</h3><div class="eArea xe_content xe_dr_txt"><ol>
<li>XpressEngine는 query문을 직접 사용하지 않습니다.</li>
<li>이는 다양한 DBMS를 지원하기 위해서입니다.</li>
<li>XML Query문의 확장자는 .xml 입니다.</li></ol></div><h3 id="1249368742400-2">사용법</h3><div class="eArea xe_content xe_dr_txt"><p>모듈 또는 애드온, 플러그인등에서 아래와 같이 사용할 수 있습니다.<br><br> 1. $args->name = "zero";<br> 2. $output = executeQuery("member.getMemberInfo", $args);<br><br>XML Query를 호출하여 실제 DB의 데이터를 받거나 조작하기 위해서 사용되는 executeQuery() 함수는 DB::executeQuery()의 alias입니다.<br><br> 1. function executeQuery($xml_query_name, $args = null);<br><br>첫번째 인자로 실행하고자 하는 xml query의 이름을 받게 됩니다.<br>이름은 모듈명.쿼리ID 로 이루어집니다.<br><br>$args는 null일수도 있고 해당 xml query에서 필요시 stdclass의 variables type으로 변수의 key, value를 설정후 인자로 넘기게 됩니다.<br><br>결과는 Object class의 객체로 return 됩니다.<br>쿼리 실패는 $output->toBool()이 false일 경우이고 true라면 쿼리는 정상적으로 실행이 된 것을 의미합니다.<br>select문의 결과 데이터는 $output->data 변수에 담겨져 return 됩니다.</p></div><h3 id="h1249628444840">XML sample</h3><div class="eArea xe_content xe_dr_txt"><ol class="code">
<li><query id="쿼리아이디" action="select|update|delete|insert"><br> <tables><br> <table name="원테이블이름" alias="alias" /><br> ...<br> </tables><br><br> <columns><br> <column name="컬럼명" alias="alias" /><br> ...<br> </columns><br><br> <conditions><br> <condition operation="조건걸" column="Column명" var="변수명" filter="필터형식" default="기본값" notnull="notnull" minlength="최소길이" maxlength="최대길이" pipe="연결연산자" /><br> ...<br> <group pipe="연결연산자"><br> <condition operation="조건걸" column="Column명" var="변수명" filter="필터형식" default="기본값" notnull="notnull" minlength="최소길이" maxlength="최대길이" pipe="연결연산자" /><br> ...<br> </group><br> ...<br> </conditions><br><br> <navigation><br> <index var="이름" default="기본값" order="desc|asc" /><br> <list_count var="변수명" default="기본값" /><br> <page_count var="변수명" default="기본값" /><br> <page var="변수명" default="변수명" /><br> </navigation><br><br> <groups><br> <group column="GroupBy 대상" /><br> </groups><br></query></li></ol></div><div class="eArea xe_content xe_dr_txt eFocus"><ul>
<li>
<p><query> 의 attribute</p>
<ul>
<li>id : 쿼리를 찾을 수 있는 아이디입니다. module.query_id 로 query xml 파일을 찾고 사용하게 됩니다.<br>action : select, update, delete, insert 4가지 종류가 있습니다.</li></ul>
<p> </p></li>
<li><tables>
<ul>
<li>테이블 조인시 여러개의 <table> 을 사용할 수 있습니다.<br>name : 원테이블 명 (제로보드XE에서 prefix는 무시) alias : join또는 다른 용도로 원테이블명을 바꾸어 사용할 경우</li></ul></li>
<li><columns>
<ul>
<li>처리하고자 하는 컬럼명을 입력하시면 됩니다. name : 컬럼명 alias : 다른 이름으로 바꾸어 결과를 만들고자 할 경우 지정</li></ul></li>
<li><conditions>
<ul>
<li>조건절을 구성합니다.</li>
<li>조건절을 여러개의 그룹으로 사용하고자 할 때에는 <group> 태그를 이용해서 묶어 주실 수 있습니다.</li></ul></li>
<li><group> ... </group>
<ul>
<li>조건절을 그룹으로 사용할 경우 pipe="and|or" 를 이용하여 그룹끼리의 조건을 지정할 수 있습니다.</li></ul></li>
<li><condition>
<ul>
<li>
<p>operation : 아래와 같은 연산자로 처리가 됩니다.</p>
<div style="background-color: rgb(249, 249, 216);" class="section">equal : column = (var|default)<br>more : column >= (var|default)<br>excess : column > (var|default)<br>less : column <= (var|default)<br>below : column < (var|default)<br>notequal : column != (var|default)<br>notnull : column is not null<br>null : column is null<br>like_prefix : column like '%var|default'<br>like_tail : column like 'var|default%'<br>like : column like '%var|default%'<br>in : column in (var|default)</div>
<p> </p></li>
<li>column : 컬럼명을 지정할 수 있습니다.</li>
<li>var : executeQuery()함수에서 2번째 인자의 key값을 지정할 수 있습니다.</li>
<li>
<p>filter : var 값의 조건을 filtering합니다. 아래와 같은 filter를 지원합니다.</p>
<div style="background-color: rgb(249, 249, 216);" class="section">email, email_address : 메일 형식<br>homepage : http|https://등의 홈페이지 형식<br>userid, user_id : 제로보드XE의 사용자 아이디 형식 (첫글자는 영문, 2번째부터는 숫자+영문+_)<br>number : 숫자만 허용<br>alpha : 영문자만 허용<br>alpha_number : 숫자+영문자만 허용</div></li>
<li>
<p>default : var값이 null일 경우 default값으로 대체됩니다. 아래와 같은 함수값을 가질 수도 있습니다.</p>
<div style="background-color: rgb(249, 249, 216);" class="section">ipaddress() : 접속자의 ip 주소<br>unixtime() : unix time (php의 time()함수)<br>curdate() : YYYYMMDDHHIISS<br>plus(int count) : column = column + count<br>minus(int count) : column = column - count</div></li>
<li>notnull : not null check를 하게 됩니다. minlength : 최소길이 체크 maxlength : 최대길이 체크 pipe : and|or등의 조건을 지정할 수 있습니다.</li></ul></li>
<li>
<p><navigation> : navigation은 정렬순서(order by) 또는 페이징을 지원합니다.</p>
<ul>
<li>
<p><index> 정렬할 컬럼과 정렬방법을 지정할 수 있습니다.</p>
<div style="background-color: rgb(249, 249, 216);" class="section">var : 대상 컬럼명을 담은 변수명<br>default : var값이 없을 경우 기본으로 정렬할 컬럼명 지정<br>order : asc|desc</div></li>
<li>
<p><list_count> 페이징을 한 결과를 받을 수 있습니다.</p>
<div style="background-color: rgb(249, 249, 216);" class="section">var : 목록의 rows를 지정<br>default : var값이 없을 경우 기본 rows 값</div></li>
<li>
<p><page_count> 페이징 계산시에 하단 페이지 네비게이션의 수를 지정</p>
<div style="background-color: rgb(249, 249, 216);" class="section">var : 페이징 네비게이션의 수<br>default : var값이 없을 경우 기본 페이징 네비게이션의 수</div></li>
<li>
<p><page> 현재 몇번째 페이지인지를 지정할 수 있습니다.</p>
<div style="background-color: rgb(249, 249, 216);" class="section">var : 현재 몇번째 페이지인지를 지정할 변수<br>default : var값이 지정되지 않았을 경우 페이지 번호</div></li></ul>
<p> </p></li>
<li><groups> : group by 절을 사용할 수 있습니다.</li></ul></div><h3 id="Selectquery예제">Select query 예제</h3><div class="eArea xe_content xe_dr_txt"><ul>
<li>
<p>member.getMemberList : member테이블에서 특정 조건을 가진 회원들을 페이징을 하면서 select</p>
<ol class="code">
<li><query id="getMemberList" action="select"><br><tables><br> <table name="member" /><br></tables></li>
<li><br><columns><br> <column name="*" /><br></columns></li>
<li><br><conditions><br> <condition operation="equal" column="is_admin" var="is_admin" /><br> <condition operation="equal" column="denied" var="is_denied" pipe="and" /><br> <group pipe="and"><br> <condition operation="like" column="user_id" var="s_user_id" /><br> <condition operation="like" column="user_name" var="s_user_name" pipe="or" /><br> <condition operation="like" column="nick_name" var="s_nick_name" pipe="or" /><br> <condition operation="like" column="email_address" var="s_email_address" pipe="or" /><br> <condition operation="like_prefix" column="regdate" var="s_regdate" pipe="or" /><br> <condition operation="like_prefix" column="last_login" var="s_last_login" pipe="or" /><br> </group><br></conditions><br><br><navigation><br> <index var="sort_index" default="member_srl" order="desc" /><br> <list_count var="list_count" default="20" /><br> <page_count var="page_count" default="10" /><br> <page var="page" default="1" /><br></navigation><br></query></li></ol></li>
<li>document.getMonthlyArchivedList : 모듈을 '년월'일을 기준으로 group by 한 결과를 가져옴</li></ul></div><div class="eArea xe_content xe_dr_txt"><ol style="margin-left: 2em;" class="code">
<li><query id="getMonthlyArchivedList" action="select"><br><tables><br> <table name="documents" /><br></tables><br><br><columns><br> <column name="substr(regdate,1,6)" alias="month"/><br> <column name="count(*)" alias="count" /><br></columns><br><br><conditions><br> <condition operation="in" column="module_srl" var="module_srl" filter="number" /><br></conditions><br><br><groups><br> <group column="substr(regdate,1,6)" /><br></groups><br></query></li></ol></div><h3 id="h1249627751923">Join Select 예제</h3><div class="eArea xe_content xe_dr_txt"><p>document.getTrashList 예제입니다.</p></div><div class="eArea xe_content xe_dr_txt"><p></p>
<div><query id="getTrashList" action="select"></div>
<div> <tables></div>
<div> <table name="documents" /></div>
<div> <table name="document_trash" /></div>
<div> </tables></div>
<div> <columns></div>
<div> <column name="documents.*" /></div>
<div> <column name="document_trash.trash_srl" alias="trash_srl" /></div>
<div> <column name="document_trash.module_srl" alias="module_srl" /></div>
<div> <column name="document_trash.trash_date" alias="trash_date" /></div>
<div> <column name="document_trash.description" alias="trash_description" /></div>
<div> <column name="document_trash.ipaddress" alias="trash_ipaddress" /></div>
<div> <column name="document_trash.user_id" alias="trash_user_id" /></div>
<div> <column name="document_trash.user_name" alias="trash_user_name" /></div>
<div> <column name="document_trash.nick_name" alias="trash_nick_name" /></div>
<div> <column name="document_trash.member_srl" alias="trash_member_srl" /></div>
<div> </columns></div>
<div> <conditions></div>
<div> <condition operation="equal" column="document_trash.document_srl" default="documents.document_srl" notnull="notnull" /></div>
<div> <condition operation="in" column="document_trash.module_srl" var="module_srl" filter="number" pipe="and" /></div>
<div> <condition operation="equal" column="document_trash.member_srl" var="member_srl" filter="number" pipe="and" /></div>
<div><br></div>
<div> <group pipe="and"></div>
<div> <condition operation="like" column="documents.title" var="s_title" /></div>
<div> <condition operation="like" column="documents.content" var="s_content" pipe="or" /></div>
<div> <condition operation="like" column="documents.user_name" var="s_user_name" pipe="or" /></div>
<div> <condition operation="like" column="documents.user_id" var="s_user_id" pipe="or" /></div>
<div> <condition operation="like" column="documents.nick_name" var="s_nick_name" pipe="or" /></div>
<div> <condition operation="like" column="documents.email_address" var="s_email_addres" pipe="or" /></div>
<div> <condition operation="like" column="documents.homepage" var="s_homepage" pipe="or" /></div>
<div> <condition operation="like" column="documents.tags" var="s_tags" pipe="or" /></div>
<div> <condition operation="equal" column="documents.is_secret" var="s_is_secret" pipe="or" /></div>
<div> <condition operation="equal" column="documents.member_srl" var="s_member_srl" pipe="or" /></div>
<div> <condition operation="more" column="documents.readed_count" var="s_readed_count" pipe="or" /></div>
<div> <condition operation="more" column="documents.voted_count" var="s_voted_count" pipe="or" /></div>
<div> <condition operation="more" column="documents.comment_count" var="s_comment_count" pipe="or" /></div>
<div> <condition operation="more" column="documents.trackback_count" var="s_trackback_count" pipe="or" /></div>
<div> <condition operation="more" column="documents.uploaded_count" var="s_uploaded_count" pipe="or" /></div>
<div> <condition operation="like_prefix" column="documents.regdate" var="s_regdate" pipe="or" /></div>
<div> <condition operation="like_prefix" column="documents.last_update" var="s_last_update" pipe="or" /></div>
<div> <condition operation="like_prefix" column="documents.ipaddress" var="s_ipaddress" pipe="or" /></div>
<div> </group></div>
<div><br></div>
<div><br></div>
<div> </conditions></div>
<div> <navigation></div>
<div> <index var="sort_index" default="documents.list_order" order="order_type" /></div>
<div> <list_count var="list_count" default="20" /></div>
<div> <page_count var="page_count" default="10" /></div>
<div> <page var="page" default="1" /></div>
<div> </navigation></div>
<div></query></div>
<p></p></div><h3 id="h1249627778964">Letf Join Select 예제</h3><div class="eArea xe_content xe_dr_txt"><p></p>
<div><query id="getDocumentsExtraVars" action="select"></div>
<div> <tables></div>
<div> <table name="document_extra_keys" alias="extra_keys" /></div>
<div> <table name="document_extra_vars" alias="extra_vars" type="left join"></div>
<div> <conditions></div>
<div> <condition operation="equal" column="extra_keys.module_srl" default="extra_vars.module_srl" /></div>
<div> <condition operation="in" column="extra_vars.document_srl" var="document_srl" pipe="and" /></div>
<div> <condition operation="equal" column="extra_keys.eid" default="extra_vars.eid" pipe="and" /></div>
<div> </conditions></div>
<div> </table></div>
<div> </tables></div>
<div> <columns></div>
<div> <column name="extra_keys.module_srl" alias="module_srl" /></div>
<div> <column name="extra_keys.var_name" alias="name" /></div>
<div> <column name="extra_keys.var_type" alias="type" /></div>
<div> <column name="extra_keys.var_is_required" alias="is_required" /></div>
<div> <column name="extra_keys.var_search" alias="search" /></div>
<div> <column name="extra_keys.var_default" alias="default" /></div>
<div> <column name="extra_keys.var_desc" alias="desc" /></div>
<div> <column name="extra_keys.var_idx" alias="idx" /></div>
<div> <column name="extra_vars.document_srl" alias="document_srl" /></div>
<div> <column name="extra_vars.lang_code" alias="lang_code" /></div>
<div> <column name="extra_vars.value" alias="value" /></div>
<div> <column name="extra_keys.eid" alias="eid" /></div>
<div> </columns></div>
<div> <navigation></div>
<div> <index var="sort_index" default="extra_keys.var_idx" order="asc" /></div>
<div> </navigation></div>
<div></query></div>
<div><br></div>
<p></p></div><h3 id="1249368742400-5">Insert 예제</h3><div class="eArea xe_content xe_dr_txt"><ul>
<li>
<p>document.insertCategory : 문서 카테고리 추가</p>
<ol class="code">
<li><query id="insertCategory" action="insert"><br><tables><br> <table name="document_categories" /><br></tables><br><br><columns><br> <column name="category_srl" var="category_srl" filter="number" notnull="notnull" /><br> <column name="module_srl" var="module_srl" filter="number" default="0" notnull="notnull" /><br> <column name="title" var="title" notnull="notnull" minlength="2" maxlength="250" /><br> <column name="document_count" var="document_count" default="0" /><br> <column name="regdate" var="regdate" default="curdate()" /><br> <column name="last_update" var="last_update" default="curdate()" /><br> <column name="list_order" var="list_order" default="0" /><br></columns><br></query></li></ol></li></ul></div><h3 id="1249368742400-6">update 예제</h3><div class="eArea xe_content xe_dr_txt"><ul>
<li>
<p>document.updateCategory : 특정 카테고리의 제목이나 순서, 최근 수정일을 변경</p>
<ol class="code">
<li><query id="updateCategory" action="update"><br><tables><br> <table name="document_categories" /><br></tables><br><br><columns><br> <column name="title" var="title" /><br> <column name="list_order" var="list_order" /><br> <column name="last_update" var="last_update" default="curdate()" /><br></columns><br><br><conditions><br> <condition operation="equal" column="category_srl" var="category_srl" filter="number" notnull="notnull" /><br></conditions><br></query></li></ol></li></ul></div><h3 id="1249368742400-7">delete 예제</h3><div class="eArea xe_content xe_dr_txt"><ul>
<li>
<p>document.deleteCategory : 특정 카테고리를 삭제</p>
<ol class="code">
<li><query id="deleteCategory" action="delete"><br><tables><br> <table name="document_categories" /><br></tables><br><br><conditions><br> <condition operation="equal" column="category_srl" var="category_srl" filter="number" notnull="notnull" /><br></conditions><br></query></li></ol></li></ul></div><h3 id="1249368742400-7">Select Click Count 예제</h3><div class="eArea xe_content xe_dr_txt"><p>Select 시 조회수 등의 정수의 숫자 컬럼을 +1 하는 기능입니다.</p>
<p>Cubrid의 경우에는 incr()이라는 함수를 사용하고 다른 데이타베이스의 경우 해당 컬럼을 Select후 Update 합니다.</p>
<p>XE Core 1.2.6 이상 버전에서 지원하고 있습니다.</p>
<p></p>
<p>document.getDocument XML Query에 Click Count 를 적용해 본 예제입니다.</p>
<p>select시 정수 숫자 컬럼 node에 attribute는 click_count, 값은 Argument로 매핑되는 변수명을 기입합니다.</p>
<p></p></div><div class="eArea xe_content xe_dr_txt"><p><query id="getDocument" action="select"><br> <tables><br> <table name="documents" /><br> </tables></p>
<p> <columns><br> <column name="document_srl" /><br> <column name="module_srl" /><br> <column name="category_srl" /><br> <column name="lang_code" /><br> <column name="is_notice" /><br> <column name="is_secret" /><br> <column name="title" /><br> <column name="title_bold" /><br> <column name="title_color" /><br> <column name="content" /><br> <column name="readed_count" <b><span style="color: rgb(255, 0, 0);">click_count="incr_readed_count"</span></b>/><br> <column name="voted_count" /><br> <column name="blamed_count" /><br> <column name="comment_count" /><br> <column name="trackback_count" /><br> <column name="uploaded_count" /><br> <column name="password" /><br> <column name="user_id" /><br> <column name="user_name" /><br> <column name="nick_name" /><br> <column name="member_srl" /><br> <column name="email_address" /><br> <column name="homepage" /><br> <column name="tags" /><br> <column name="extra_vars" /><br> <column name="regdate" /><br> <column name="last_update" /><br> <column name="last_updater" /><br> <column name="ipaddress" /><br> <column name="list_order" /><br> <column name="update_order" /><br> <column name="allow_comment" /><br> <column name="lock_comment" /><br> <column name="allow_trackback" /><br> <column name="notify_message" /><br> </columns><br> <conditions><br> <condition operation="equal" column="document_srl" var="document_srl" filter="number" notnull="notnull" /><br> </conditions><br></query></p>
<p></p></div><div class="eArea xe_content xe_dr_txt"><p>click_count 의 매핑변수 값이 true이면 해당 컬럼을 +1 증가합니다.</p></div><div class="eArea xe_content xe_dr_txt"><p></p>
<div>$args->document_srl = $this->document_srl;</div>
<div>$args-><span style="color: rgb(255, 0, 0);">incr_readed_count</span> =<span style="color: rgb(255, 0, 0);"> true</span>;</div>
<div>$output = executeQuery('document.getDocument', $args);</div>
<div><br></div>
<p></p></div>
|
라르게덴 |
2010.10.31 20:20:53 |
|
|
|
복원
<div class="eArea xe_content xe_dr_txt"><p><a href="http://doc.xpressengine.com/classXmlQueryParser.html" target="_blank">http://doc.xpressengine.com/classXmlQueryParser.html</a> (클래스 구조)</p></div><ul class="toc"><li class="toc3"><a href="#1249368742400-1">개요</a></li><li class="toc3"><a href="#1249368742400-2">사용법</a></li><li class="toc3"><a href="#h1249628444840">XML sample</a></li><li class="toc3"><a href="#Selectquery%EC%98%88%EC%A0%9C">Select query 예제</a></li><li class="toc3"><a href="#h1249627751923">Join Select 예제</a></li><li class="toc3"><a href="#h1249627778964">Letf Join Select 예제</a></li><li class="toc3"><a href="#1249368742400-5">Insert 예제</a></li><li class="toc3"><a href="#1249368742400-6">update 예제</a></li><li class="toc3"><a href="#1249368742400-7">delete 예제</a></li><li class="toc3"><a href="#1249368742400-7">Select Click Count 예제</a></li></ul><h3 id="1249368742400-1">개요</h3><div class="eArea xe_content xe_dr_txt"><ol>
<li>XpressEngine는 query문을 직접 사용하지 않습니다.</li>
<li>이는 다양한 DBMS를 지원하기 위해서입니다.</li>
<li>XML Query문의 확장자는 .xml 입니다.</li></ol></div><h3 id="1249368742400-2">사용법</h3><div class="eArea xe_content xe_dr_txt"><p>모듈 또는 애드온, 플러그인등에서 아래와 같이 사용할 수 있습니다.<br><br> 1. $args->name = "zero";<br> 2. $output = executeQuery("member.getMemberInfo", $args);<br><br>XML Query를 호출하여 실제 DB의 데이터를 받거나 조작하기 위해서 사용되는 executeQuery() 함수는 DB::executeQuery()의 alias입니다.<br><br> 1. function executeQuery($xml_query_name, $args = null);<br><br>첫번째 인자로 실행하고자 하는 xml query의 이름을 받게 됩니다.<br>이름은 모듈명.쿼리ID 로 이루어집니다.<br><br>$args는 null일수도 있고 해당 xml query에서 필요시 stdclass의 variables type으로 변수의 key, value를 설정후 인자로 넘기게 됩니다.<br><br>결과는 Object class의 객체로 return 됩니다.<br>쿼리 실패는 $output->toBool()이 false일 경우이고 true라면 쿼리는 정상적으로 실행이 된 것을 의미합니다.<br>select문의 결과 데이터는 $output->data 변수에 담겨져 return 됩니다.</p></div><h3 id="h1249628444840">XML sample</h3><div class="eArea xe_content xe_dr_txt"><ol class="code">
<li><query id="쿼리아이디" action="select|update|delete|insert"><br> <tables><br> <table name="원테이블이름" alias="alias" /><br> ...<br> </tables><br><br> <columns><br> <column name="컬럼명" alias="alias" /><br> ...<br> </columns><br><br> <conditions><br> <condition operation="조건걸" column="Column명" var="변수명" filter="필터형식" default="기본값" notnull="notnull" minlength="최소길이" maxlength="최대길이" pipe="연결연산자" /><br> ...<br> <group pipe="연결연산자"><br> <condition operation="조건걸" column="Column명" var="변수명" filter="필터형식" default="기본값" notnull="notnull" minlength="최소길이" maxlength="최대길이" pipe="연결연산자" /><br> ...<br> </group><br> ...<br> </conditions><br><br> <navigation><br> <index var="이름" default="기본값" order="desc|asc" /><br> <list_count var="변수명" default="기본값" /><br> <page_count var="변수명" default="기본값" /><br> <page var="변수명" default="변수명" /><br> </navigation><br><br> <groups><br> <group column="GroupBy 대상" /><br> </groups><br></query></li></ol></div><div class="eArea xe_content xe_dr_txt"><ul>
<li>
<p><query> 의 attribute</p>
<ul>
<li>id : 쿼리를 찾을 수 있는 아이디입니다. module.query_id 로 query xml 파일을 찾고 사용하게 됩니다.<br>action : select, update, delete, insert 4가지 종류가 있습니다.</li></ul>
<p> </p></li>
<li><tables>
<ul>
<li>테이블 조인시 여러개의 <table> 을 사용할 수 있습니다.<br>name : 원테이블 명 (제로보드XE에서 prefix는 무시) alias : join또는 다른 용도로 원테이블명을 바꾸어 사용할 경우</li></ul></li>
<li><columns>
<ul>
<li>처리하고자 하는 컬럼명을 입력하시면 됩니다. name : 컬럼명 alias : 다른 이름으로 바꾸어 결과를 만들고자 할 경우 지정</li></ul></li>
<li><conditions>
<ul>
<li>조건절을 구성합니다.</li>
<li>조건절을 여러개의 그룹으로 사용하고자 할 때에는 <group> 태그를 이용해서 묶어 주실 수 있습니다.</li></ul></li>
<li><group> ... </group>
<ul>
<li>조건절을 그룹으로 사용할 경우 pipe="and|or" 를 이용하여 그룹끼리의 조건을 지정할 수 있습니다.</li></ul></li>
<li><condition>
<ul>
<li>
<p>operation : 아래와 같은 연산자로 처리가 됩니다.</p>
<div style="background-color: rgb(249, 249, 216);" class="section">equal : column = (var|default)<br>more : column >= (var|default)<br>excess : column > (var|default)<br>less : column <= (var|default)<br>below : column < (var|default)<br>notequal : column != (var|default)<br>notnull : column is not null<br>null : column is null<br>like_prefix : column like '%var|default'<br>like_tail : column like 'var|default%'<br>like : column like '%var|default%'<br>in : column in (var|default)</div>
<p> </p></li>
<li>column : 컬럼명을 지정할 수 있습니다.</li>
<li>var : executeQuery()함수에서 2번째 인자의 key값을 지정할 수 있습니다.</li>
<li>
<p>filter : var 값의 조건을 filtering합니다. 아래와 같은 filter를 지원합니다.</p>
<div style="background-color: rgb(249, 249, 216);" class="section">email, email_address : 메일 형식<br>homepage : http|https://등의 홈페이지 형식<br>userid, user_id : 제로보드XE의 사용자 아이디 형식 (첫글자는 영문, 2번째부터는 숫자+영문+_)<br>number : 숫자만 허용<br>alpha : 영문자만 허용<br>alpha_number : 숫자+영문자만 허용</div></li>
<li>
<p>default : var값이 null일 경우 default값으로 대체됩니다. 아래와 같은 함수값을 가질 수도 있습니다.</p>
<div style="background-color: rgb(249, 249, 216);" class="section">ipaddress() : 접속자의 ip 주소<br>unixtime() : unix time (php의 time()함수)<br>curdate() : YYYYMMDDHHIISS<br>plus(int count) : column = column + count<br>minus(int count) : column = column - count</div></li>
<li>notnull : not null check를 하게 됩니다. minlength : 최소길이 체크 maxlength : 최대길이 체크 pipe : and|or등의 조건을 지정할 수 있습니다.</li></ul></li>
<li>
<p><navigation> : navigation은 정렬순서(order by) 또는 페이징을 지원합니다.</p>
<ul>
<li>
<p><index> 정렬할 컬럼과 정렬방법을 지정할 수 있습니다.</p>
<div style="background-color: rgb(249, 249, 216);" class="section">var : 대상 컬럼명을 담은 변수명<br>default : var값이 없을 경우 기본으로 정렬할 컬럼명 지정<br>order : asc|desc</div></li>
<li>
<p><list_count> 페이징을 한 결과를 받을 수 있습니다.</p>
<div style="background-color: rgb(249, 249, 216);" class="section">var : 목록의 rows를 지정<br>default : var값이 없을 경우 기본 rows 값</div></li>
<li>
<p><page_count> 페이징 계산시에 하단 페이지 네비게이션의 수를 지정</p>
<div style="background-color: rgb(249, 249, 216);" class="section">var : 페이징 네비게이션의 수<br>default : var값이 없을 경우 기본 페이징 네비게이션의 수</div></li>
<li>
<p><page> 현재 몇번째 페이지인지를 지정할 수 있습니다.</p>
<div style="background-color: rgb(249, 249, 216);" class="section">var : 현재 몇번째 페이지인지를 지정할 변수<br>default : var값이 지정되지 않았을 경우 페이지 번호</div></li></ul>
<p> </p></li>
<li><groups> : group by 절을 사용할 수 있습니다.</li></ul></div><h3 id="Selectquery예제">Select query 예제</h3><div class="eArea xe_content xe_dr_txt"><ul>
<li>
<p>member.getMemberList : member테이블에서 특정 조건을 가진 회원들을 페이징을 하면서 select</p>
<ol class="code">
<li><query id="getMemberList" action="select"><br><tables><br> <table name="member" /><br></tables></li>
<li><br><columns><br> <column name="*" /><br></columns></li>
<li><br><conditions><br> <condition operation="equal" column="is_admin" var="is_admin" /><br> <condition operation="equal" column="denied" var="is_denied" pipe="and" /><br> <group pipe="and"><br> <condition operation="like" column="user_id" var="s_user_id" /><br> <condition operation="like" column="user_name" var="s_user_name" pipe="or" /><br> <condition operation="like" column="nick_name" var="s_nick_name" pipe="or" /><br> <condition operation="like" column="email_address" var="s_email_address" pipe="or" /><br> <condition operation="like_prefix" column="regdate" var="s_regdate" pipe="or" /><br> <condition operation="like_prefix" column="last_login" var="s_last_login" pipe="or" /><br> </group><br></conditions><br><br><navigation><br> <index var="sort_index" default="member_srl" order="desc" /><br> <list_count var="list_count" default="20" /><br> <page_count var="page_count" default="10" /><br> <page var="page" default="1" /><br></navigation><br></query></li></ol></li>
<li>document.getMonthlyArchivedList : 모듈을 '년월'일을 기준으로 group by 한 결과를 가져옴</li></ul></div><div class="eArea xe_content xe_dr_txt"><ol style="margin-left: 2em;" class="code">
<li><query id="getMonthlyArchivedList" action="select"><br><tables><br> <table name="documents" /><br></tables><br><br><columns><br> <column name="substr(regdate,1,6)" alias="month"/><br> <column name="count(*)" alias="count" /><br></columns><br><br><conditions><br> <condition operation="in" column="module_srl" var="module_srl" filter="number" /><br></conditions><br><br><groups><br> <group column="substr(regdate,1,6)" /><br></groups><br></query></li></ol></div><h3 id="h1249627751923">Join Select 예제</h3><div class="eArea xe_content xe_dr_txt"><p>document.getTrashList 예제입니다.</p></div><div class="eArea xe_content xe_dr_txt"><p></p>
<div><query id="getTrashList" action="select"></div>
<div> <tables></div>
<div> <table name="documents" /></div>
<div> <table name="document_trash" /></div>
<div> </tables></div>
<div> <columns></div>
<div> <column name="documents.*" /></div>
<div> <column name="document_trash.trash_srl" alias="trash_srl" /></div>
<div> <column name="document_trash.module_srl" alias="module_srl" /></div>
<div> <column name="document_trash.trash_date" alias="trash_date" /></div>
<div> <column name="document_trash.description" alias="trash_description" /></div>
<div> <column name="document_trash.ipaddress" alias="trash_ipaddress" /></div>
<div> <column name="document_trash.user_id" alias="trash_user_id" /></div>
<div> <column name="document_trash.user_name" alias="trash_user_name" /></div>
<div> <column name="document_trash.nick_name" alias="trash_nick_name" /></div>
<div> <column name="document_trash.member_srl" alias="trash_member_srl" /></div>
<div> </columns></div>
<div> <conditions></div>
<div> <condition operation="equal" column="document_trash.document_srl" default="documents.document_srl" notnull="notnull" /></div>
<div> <condition operation="in" column="document_trash.module_srl" var="module_srl" filter="number" pipe="and" /></div>
<div> <condition operation="equal" column="document_trash.member_srl" var="member_srl" filter="number" pipe="and" /></div>
<div><br></div>
<div> <group pipe="and"></div>
<div> <condition operation="like" column="documents.title" var="s_title" /></div>
<div> <condition operation="like" column="documents.content" var="s_content" pipe="or" /></div>
<div> <condition operation="like" column="documents.user_name" var="s_user_name" pipe="or" /></div>
<div> <condition operation="like" column="documents.user_id" var="s_user_id" pipe="or" /></div>
<div> <condition operation="like" column="documents.nick_name" var="s_nick_name" pipe="or" /></div>
<div> <condition operation="like" column="documents.email_address" var="s_email_addres" pipe="or" /></div>
<div> <condition operation="like" column="documents.homepage" var="s_homepage" pipe="or" /></div>
<div> <condition operation="like" column="documents.tags" var="s_tags" pipe="or" /></div>
<div> <condition operation="equal" column="documents.is_secret" var="s_is_secret" pipe="or" /></div>
<div> <condition operation="equal" column="documents.member_srl" var="s_member_srl" pipe="or" /></div>
<div> <condition operation="more" column="documents.readed_count" var="s_readed_count" pipe="or" /></div>
<div> <condition operation="more" column="documents.voted_count" var="s_voted_count" pipe="or" /></div>
<div> <condition operation="more" column="documents.comment_count" var="s_comment_count" pipe="or" /></div>
<div> <condition operation="more" column="documents.trackback_count" var="s_trackback_count" pipe="or" /></div>
<div> <condition operation="more" column="documents.uploaded_count" var="s_uploaded_count" pipe="or" /></div>
<div> <condition operation="like_prefix" column="documents.regdate" var="s_regdate" pipe="or" /></div>
<div> <condition operation="like_prefix" column="documents.last_update" var="s_last_update" pipe="or" /></div>
<div> <condition operation="like_prefix" column="documents.ipaddress" var="s_ipaddress" pipe="or" /></div>
<div> </group></div>
<div><br></div>
<div><br></div>
<div> </conditions></div>
<div> <navigation></div>
<div> <index var="sort_index" default="documents.list_order" order="order_type" /></div>
<div> <list_count var="list_count" default="20" /></div>
<div> <page_count var="page_count" default="10" /></div>
<div> <page var="page" default="1" /></div>
<div> </navigation></div>
<div></query></div>
<p></p></div><h3 id="h1249627778964">Letf Join Select 예제</h3><div class="eArea xe_content xe_dr_txt"><p></p>
<div><query id="getDocumentsExtraVars" action="select"></div>
<div> <tables></div>
<div> <table name="document_extra_keys" alias="extra_keys" /></div>
<div> <table name="document_extra_vars" alias="extra_vars" type="left join"></div>
<div> <conditions></div>
<div> <condition operation="equal" column="extra_keys.module_srl" default="extra_vars.module_srl" /></div>
<div> <condition operation="in" column="extra_vars.document_srl" var="document_srl" pipe="and" /></div>
<div> <condition operation="equal" column="extra_keys.eid" default="extra_vars.eid" pipe="and" /></div>
<div> </conditions></div>
<div> </table></div>
<div> </tables></div>
<div> <columns></div>
<div> <column name="extra_keys.module_srl" alias="module_srl" /></div>
<div> <column name="extra_keys.var_name" alias="name" /></div>
<div> <column name="extra_keys.var_type" alias="type" /></div>
<div> <column name="extra_keys.var_is_required" alias="is_required" /></div>
<div> <column name="extra_keys.var_search" alias="search" /></div>
<div> <column name="extra_keys.var_default" alias="default" /></div>
<div> <column name="extra_keys.var_desc" alias="desc" /></div>
<div> <column name="extra_keys.var_idx" alias="idx" /></div>
<div> <column name="extra_vars.document_srl" alias="document_srl" /></div>
<div> <column name="extra_vars.lang_code" alias="lang_code" /></div>
<div> <column name="extra_vars.value" alias="value" /></div>
<div> <column name="extra_keys.eid" alias="eid" /></div>
<div> </columns></div>
<div> <navigation></div>
<div> <index var="sort_index" default="extra_keys.var_idx" order="asc" /></div>
<div> </navigation></div>
<div></query></div>
<div><br></div>
<p></p></div><h3 id="1249368742400-5">Insert 예제</h3><div class="eArea xe_content xe_dr_txt"><ul>
<li>
<p>document.insertCategory : 문서 카테고리 추가</p>
<ol class="code">
<li><query id="insertCategory" action="insert"><br><tables><br> <table name="document_categories" /><br></tables><br><br><columns><br> <column name="category_srl" var="category_srl" filter="number" notnull="notnull" /><br> <column name="module_srl" var="module_srl" filter="number" default="0" notnull="notnull" /><br> <column name="title" var="title" notnull="notnull" minlength="2" maxlength="250" /><br> <column name="document_count" var="document_count" default="0" /><br> <column name="regdate" var="regdate" default="curdate()" /><br> <column name="last_update" var="last_update" default="curdate()" /><br> <column name="list_order" var="list_order" default="0" /><br></columns><br></query></li></ol></li></ul></div><h3 id="1249368742400-6">update 예제</h3><div class="eArea xe_content xe_dr_txt"><ul>
<li>
<p>document.updateCategory : 특정 카테고리의 제목이나 순서, 최근 수정일을 변경</p>
<ol class="code">
<li><query id="updateCategory" action="update"><br><tables><br> <table name="document_categories" /><br></tables><br><br><columns><br> <column name="title" var="title" /><br> <column name="list_order" var="list_order" /><br> <column name="last_update" var="last_update" default="curdate()" /><br></columns><br><br><conditions><br> <condition operation="equal" column="category_srl" var="category_srl" filter="number" notnull="notnull" /><br></conditions><br></query></li></ol></li></ul></div><h3 id="1249368742400-7">delete 예제</h3><div class="eArea xe_content xe_dr_txt"><ul>
<li>
<p>document.deleteCategory : 특정 카테고리를 삭제</p>
<ol class="code">
<li><query id="deleteCategory" action="delete"><br><tables><br> <table name="document_categories" /><br></tables><br><br><conditions><br> <condition operation="equal" column="category_srl" var="category_srl" filter="number" notnull="notnull" /><br></conditions><br></query></li></ol></li></ul></div><h3 id="1249368742400-7">Select Click Count 예제</h3><div class="eArea xe_content xe_dr_txt"><p>Select 시 조회수 등의 정수의 숫자 컬럼을 +1 하는 기능입니다.</p>
<p>Cubrid의 경우에는 incr()이라는 함수를 사용하고 다른 데이타베이스의 경우 해당 컬럼을 Select후 Update 합니다.</p>
<p>XE Core 1.2.6 이상 버전에서 지원하고 있습니다.</p>
<p></p>
<p>document.getDocument XML Query에 Click Count 를 적용해 본 예제입니다.</p>
<p>select시 정수 숫자 컬럼 node에 attribute는 click_count, 값은 Argument로 매핑되는 변수명을 기입합니다.</p>
<p></p></div><div class="eArea xe_content xe_dr_txt"><p><query id="getDocument" action="select"><br> <tables><br> <table name="documents" /><br> </tables></p>
<p> <columns><br> <column name="document_srl" /><br> <column name="module_srl" /><br> <column name="category_srl" /><br> <column name="lang_code" /><br> <column name="is_notice" /><br> <column name="is_secret" /><br> <column name="title" /><br> <column name="title_bold" /><br> <column name="title_color" /><br> <column name="content" /><br> <column name="readed_count" <b><span style="color: rgb(255, 0, 0);">click_count="incr_readed_count"</span></b>/><br> <column name="voted_count" /><br> <column name="blamed_count" /><br> <column name="comment_count" /><br> <column name="trackback_count" /><br> <column name="uploaded_count" /><br> <column name="password" /><br> <column name="user_id" /><br> <column name="user_name" /><br> <column name="nick_name" /><br> <column name="member_srl" /><br> <column name="email_address" /><br> <column name="homepage" /><br> <column name="tags" /><br> <column name="extra_vars" /><br> <column name="regdate" /><br> <column name="last_update" /><br> <column name="last_updater" /><br> <column name="ipaddress" /><br> <column name="list_order" /><br> <column name="update_order" /><br> <column name="allow_comment" /><br> <column name="lock_comment" /><br> <column name="allow_trackback" /><br> <column name="notify_message" /><br> </columns><br> <conditions><br> <condition operation="equal" column="document_srl" var="document_srl" filter="number" notnull="notnull" /><br> </conditions><br></query></p>
<p></p></div><div class="eArea xe_content xe_dr_txt"><p>click_count 의 매핑변수 값이 true이면 해당 컬럼을 +1 증가합니다.</p></div><div class="eArea xe_content xe_dr_txt"><p></p>
<div>$args->document_srl = $this->document_srl;</div>
<div>$args-><span style="color: rgb(255, 0, 0);">incr_readed_count</span> =<span style="color: rgb(255, 0, 0);"> true</span>;</div>
<div>$output = executeQuery('document.getDocument', $args);</div>
<div><br></div>
<p></p></div><p>.<br></p>
|
라르게덴 |
2010.10.31 20:20:14 |
|
|
|
복원
<div class="eArea xe_content xe_dr_txt"><p><a href="http://doc.xpressengine.com/classXmlQueryParser.html" target="_blank">http://doc.xpressengine.com/classXmlQueryParser.html</a> (클래스 구조)</p></div><ul class="toc"><li class="toc3"><a href="#1249368742400-1">개요</a></li><li class="toc3"><a href="#1249368742400-2">사용법</a></li><li class="toc3"><a href="#h1249628444840">XML sample</a></li><li class="toc3"><a href="#Selectquery예제">Select query 예제</a></li><li class="toc3"><a href="#h1249627751923">Join Select 예제</a></li><li class="toc3"><a href="#h1249627778964">Letf Join Select 예제</a></li><li class="toc3"><a href="#1249368742400-5">Insert 예제</a></li><li class="toc3"><a href="#1249368742400-6">update 예제</a></li><li class="toc3"><a href="#1249368742400-7">delete 예제</a></li><li class="toc3"><a href="#1249368742400-7">Select Click Count 예제</a></li></ul><h3 id="1249368742400-1">개요</h3><div class="eArea xe_content xe_dr_txt"><ol>
<li>XpressEngine는 query문을 직접 사용하지 않습니다.</li>
<li>이는 다양한 DBMS를 지원하기 위해서입니다.</li>
<li>XML Query문의 확장자는 .xml 입니다.</li></ol></div><h3 id="1249368742400-2">사용법</h3><div class="eArea xe_content xe_dr_txt"><p>모듈 또는 애드온, 플러그인등에서 아래와 같이 사용할 수 있습니다.<br><br> 1. $args->name = "zero";<br> 2. $output = executeQuery("member.getMemberInfo", $args);<br><br>XML Query를 호출하여 실제 DB의 데이터를 받거나 조작하기 위해서 사용되는 executeQuery() 함수는 DB::executeQuery()의 alias입니다.<br><br> 1. function executeQuery($xml_query_name, $args = null);<br><br>첫번째 인자로 실행하고자 하는 xml query의 이름을 받게 됩니다.<br>이름은 모듈명.쿼리ID 로 이루어집니다.<br><br>$args는 null일수도 있고 해당 xml query에서 필요시 stdclass의 variables type으로 변수의 key, value를 설정후 인자로 넘기게 됩니다.<br><br>결과는 Object class의 객체로 return 됩니다.<br>쿼리 실패는 $output->toBool()이 false일 경우이고 true라면 쿼리는 정상적으로 실행이 된 것을 의미합니다.<br>select문의 결과 데이터는 $output->data 변수에 담겨져 return 됩니다.</p></div><h3 id="h1249628444840">XML sample</h3><div class="eArea xe_content xe_dr_txt"><ol class="code">
<li><query id="쿼리아이디" action="select|update|delete|insert"><br> <tables><br> <table name="원테이블이름" alias="alias" /><br> ...<br> </tables><br><br> <columns><br> <column name="컬럼명" alias="alias" /><br> ...<br> </columns><br><br> <conditions><br> <condition operation="조건걸" column="Column명" var="변수명" filter="필터형식" default="기본값" notnull="notnull" minlength="최소길이" maxlength="최대길이" pipe="연결연산자" /><br> ...<br> <group pipe="연결연산자"><br> <condition operation="조건걸" column="Column명" var="변수명" filter="필터형식" default="기본값" notnull="notnull" minlength="최소길이" maxlength="최대길이" pipe="연결연산자" /><br> ...<br> </group><br> ...<br> </conditions><br><br> <navigation><br> <index var="이름" default="기본값" order="desc|asc" /><br> <list_count var="변수명" default="기본값" /><br> <page_count var="변수명" default="기본값" /><br> <page var="변수명" default="변수명" /><br> </navigation><br><br> <groups><br> <group column="GroupBy 대상" /><br> </groups><br></query></li></ol></div><div class="eArea xe_content xe_dr_txt"><ul>
<li>
<p><query> 의 attribute</p>
<ul>
<li>id : 쿼리를 찾을 수 있는 아이디입니다. module.query_id 로 query xml 파일을 찾고 사용하게 됩니다.<br>action : select, update, delete, insert 4가지 종류가 있습니다.</li></ul>
<p> </p></li>
<li><tables>
<ul>
<li>테이블 조인시 여러개의 <table> 을 사용할 수 있습니다.<br>name : 원테이블 명 (제로보드XE에서 prefix는 무시) alias : join또는 다른 용도로 원테이블명을 바꾸어 사용할 경우</li></ul></li>
<li><columns>
<ul>
<li>처리하고자 하는 컬럼명을 입력하시면 됩니다. name : 컬럼명 alias : 다른 이름으로 바꾸어 결과를 만들고자 할 경우 지정</li></ul></li>
<li><conditions>
<ul>
<li>조건절을 구성합니다.</li>
<li>조건절을 여러개의 그룹으로 사용하고자 할 때에는 <group> 태그를 이용해서 묶어 주실 수 있습니다.</li></ul></li>
<li><group> ... </group>
<ul>
<li>조건절을 그룹으로 사용할 경우 pipe="and|or" 를 이용하여 그룹끼리의 조건을 지정할 수 있습니다.</li></ul></li>
<li><condition>
<ul>
<li>
<p>operation : 아래와 같은 연산자로 처리가 됩니다.</p>
<div style="BACKGROUND-COLOR: rgb(249,249,216)" class="section">equal : column = (var|default)<br>more : column >= (var|default)<br>excess : column > (var|default)<br>less : column <= (var|default)<br>below : column < (var|default)<br>notequal : column != (var|default)<br>notnull : column is not null<br>null : column is null<br>like_prefix : column like '%var|default'<br>like_tail : column like 'var|default%'<br>like : column like '%var|default%'<br>in : column in (var|default)</div>
<p> </p></li>
<li>column : 컬럼명을 지정할 수 있습니다.</li>
<li>var : executeQuery()함수에서 2번째 인자의 key값을 지정할 수 있습니다.</li>
<li>
<p>filter : var 값의 조건을 filtering합니다. 아래와 같은 filter를 지원합니다.</p>
<div style="BACKGROUND-COLOR: rgb(249,249,216)" class="section">email, email_address : 메일 형식<br>homepage : http|https://등의 홈페이지 형식<br>userid, user_id : 제로보드XE의 사용자 아이디 형식 (첫글자는 영문, 2번째부터는 숫자+영문+_)<br>number : 숫자만 허용<br>alpha : 영문자만 허용<br>alpha_number : 숫자+영문자만 허용</div></li>
<li>
<p>default : var값이 null일 경우 default값으로 대체됩니다. 아래와 같은 함수값을 가질 수도 있습니다.</p>
<div style="BACKGROUND-COLOR: rgb(249,249,216)" class="section">ipaddress() : 접속자의 ip 주소<br>unixtime() : unix time (php의 time()함수)<br>curdate() : YYYYMMDDHHIISS<br>plus(int count) : column = column + count<br>minus(int count) : column = column - count</div></li>
<li>notnull : not null check를 하게 됩니다. minlength : 최소길이 체크 maxlength : 최대길이 체크 pipe : and|or등의 조건을 지정할 수 있습니다.</li></ul></li>
<li>
<p><navigation> : navigation은 정렬순서(order by) 또는 페이징을 지원합니다.</p>
<ul>
<li>
<p><index> 정렬할 컬럼과 정렬방법을 지정할 수 있습니다.</p>
<div style="BACKGROUND-COLOR: rgb(249,249,216)" class="section">var : 대상 컬럼명을 담은 변수명<br>default : var값이 없을 경우 기본으로 정렬할 컬럼명 지정<br>order : asc|desc</div></li>
<li>
<p><list_count> 페이징을 한 결과를 받을 수 있습니다.</p>
<div style="BACKGROUND-COLOR: rgb(249,249,216)" class="section">var : 목록의 rows를 지정<br>default : var값이 없을 경우 기본 rows 값</div></li>
<li>
<p><page_count> 페이징 계산시에 하단 페이지 네비게이션의 수를 지정</p>
<div style="BACKGROUND-COLOR: rgb(249,249,216)" class="section">var : 페이징 네비게이션의 수<br>default : var값이 없을 경우 기본 페이징 네비게이션의 수</div></li>
<li>
<p><page> 현재 몇번째 페이지인지를 지정할 수 있습니다.</p>
<div style="BACKGROUND-COLOR: rgb(249,249,216)" class="section">var : 현재 몇번째 페이지인지를 지정할 변수<br>default : var값이 지정되지 않았을 경우 페이지 번호</div></li></ul>
<p> </p></li>
<li><groups> : group by 절을 사용할 수 있습니다.</li></ul></div><h3 id="Selectquery예제">Select query 예제</h3><div class="eArea xe_content xe_dr_txt"><ul>
<li>
<p>member.getMemberList : member테이블에서 특정 조건을 가진 회원들을 페이징을 하면서 select</p>
<ol class="code">
<li><query id="getMemberList" action="select"><br><tables><br> <table name="member" /><br></tables></li>
<li><br><columns><br> <column name="*" /><br></columns></li>
<li><br><conditions><br> <condition operation="equal" column="is_admin" var="is_admin" /><br> <condition operation="equal" column="denied" var="is_denied" pipe="and" /><br> <group pipe="and"><br> <condition operation="like" column="user_id" var="s_user_id" /><br> <condition operation="like" column="user_name" var="s_user_name" pipe="or" /><br> <condition operation="like" column="nick_name" var="s_nick_name" pipe="or" /><br> <condition operation="like" column="email_address" var="s_email_address" pipe="or" /><br> <condition operation="like_prefix" column="regdate" var="s_regdate" pipe="or" /><br> <condition operation="like_prefix" column="last_login" var="s_last_login" pipe="or" /><br> </group><br></conditions><br><br><navigation><br> <index var="sort_index" default="member_srl" order="desc" /><br> <list_count var="list_count" default="20" /><br> <page_count var="page_count" default="10" /><br> <page var="page" default="1" /><br></navigation><br></query></li></ol></li>
<li>document.getMonthlyArchivedList : 모듈을 '년월'일을 기준으로 group by 한 결과를 가져옴</li></ul></div><div class="eArea xe_content xe_dr_txt"><ol style="MARGIN-LEFT: 2em" class="code">
<li><query id="getMonthlyArchivedList" action="select"><br><tables><br> <table name="documents" /><br></tables><br><br><columns><br> <column name="substr(regdate,1,6)" alias="month"/><br> <column name="count(*)" alias="count" /><br></columns><br><br><conditions><br> <condition operation="in" column="module_srl" var="module_srl" filter="number" /><br></conditions><br><br><groups><br> <group column="substr(regdate,1,6)" /><br></groups><br></query></li></ol></div><h3 id="h1249627751923">Join Select 예제</h3><div class="eArea xe_content xe_dr_txt"><p>document.getTrashList 예제입니다.</p></div><div class="eArea xe_content xe_dr_txt"><p></p>
<div><query id="getTrashList" action="select"></div>
<div> <tables></div>
<div> <table name="documents" /></div>
<div> <table name="document_trash" /></div>
<div> </tables></div>
<div> <columns></div>
<div> <column name="documents.*" /></div>
<div> <column name="document_trash.trash_srl" alias="trash_srl" /></div>
<div> <column name="document_trash.module_srl" alias="module_srl" /></div>
<div> <column name="document_trash.trash_date" alias="trash_date" /></div>
<div> <column name="document_trash.description" alias="trash_description" /></div>
<div> <column name="document_trash.ipaddress" alias="trash_ipaddress" /></div>
<div> <column name="document_trash.user_id" alias="trash_user_id" /></div>
<div> <column name="document_trash.user_name" alias="trash_user_name" /></div>
<div> <column name="document_trash.nick_name" alias="trash_nick_name" /></div>
<div> <column name="document_trash.member_srl" alias="trash_member_srl" /></div>
<div> </columns></div>
<div> <conditions></div>
<div> <condition operation="equal" column="document_trash.document_srl" default="documents.document_srl" notnull="notnull" /></div>
<div> <condition operation="in" column="document_trash.module_srl" var="module_srl" filter="number" pipe="and" /></div>
<div> <condition operation="equal" column="document_trash.member_srl" var="member_srl" filter="number" pipe="and" /></div>
<div><br></div>
<div> <group pipe="and"></div>
<div> <condition operation="like" column="documents.title" var="s_title" /></div>
<div> <condition operation="like" column="documents.content" var="s_content" pipe="or" /></div>
<div> <condition operation="like" column="documents.user_name" var="s_user_name" pipe="or" /></div>
<div> <condition operation="like" column="documents.user_id" var="s_user_id" pipe="or" /></div>
<div> <condition operation="like" column="documents.nick_name" var="s_nick_name" pipe="or" /></div>
<div> <condition operation="like" column="documents.email_address" var="s_email_addres" pipe="or" /></div>
<div> <condition operation="like" column="documents.homepage" var="s_homepage" pipe="or" /></div>
<div> <condition operation="like" column="documents.tags" var="s_tags" pipe="or" /></div>
<div> <condition operation="equal" column="documents.is_secret" var="s_is_secret" pipe="or" /></div>
<div> <condition operation="equal" column="documents.member_srl" var="s_member_srl" pipe="or" /></div>
<div> <condition operation="more" column="documents.readed_count" var="s_readed_count" pipe="or" /></div>
<div> <condition operation="more" column="documents.voted_count" var="s_voted_count" pipe="or" /></div>
<div> <condition operation="more" column="documents.comment_count" var="s_comment_count" pipe="or" /></div>
<div> <condition operation="more" column="documents.trackback_count" var="s_trackback_count" pipe="or" /></div>
<div> <condition operation="more" column="documents.uploaded_count" var="s_uploaded_count" pipe="or" /></div>
<div> <condition operation="like_prefix" column="documents.regdate" var="s_regdate" pipe="or" /></div>
<div> <condition operation="like_prefix" column="documents.last_update" var="s_last_update" pipe="or" /></div>
<div> <condition operation="like_prefix" column="documents.ipaddress" var="s_ipaddress" pipe="or" /></div>
<div> </group></div>
<div><br></div>
<div><br></div>
<div> </conditions></div>
<div> <navigation></div>
<div> <index var="sort_index" default="documents.list_order" order="order_type" /></div>
<div> <list_count var="list_count" default="20" /></div>
<div> <page_count var="page_count" default="10" /></div>
<div> <page var="page" default="1" /></div>
<div> </navigation></div>
<div></query></div>
<p></p></div><h3 id="h1249627778964">Letf Join Select 예제</h3><div class="eArea xe_content xe_dr_txt"><p></p>
<div><query id="getDocumentsExtraVars" action="select"></div>
<div> <tables></div>
<div> <table name="document_extra_keys" alias="extra_keys" /></div>
<div> <table name="document_extra_vars" alias="extra_vars" type="left join"></div>
<div> <conditions></div>
<div> <condition operation="equal" column="extra_keys.module_srl" default="extra_vars.module_srl" /></div>
<div> <condition operation="in" column="extra_vars.document_srl" var="document_srl" pipe="and" /></div>
<div> <condition operation="equal" column="extra_keys.eid" default="extra_vars.eid" pipe="and" /></div>
<div> </conditions></div>
<div> </table></div>
<div> </tables></div>
<div> <columns></div>
<div> <column name="extra_keys.module_srl" alias="module_srl" /></div>
<div> <column name="extra_keys.var_name" alias="name" /></div>
<div> <column name="extra_keys.var_type" alias="type" /></div>
<div> <column name="extra_keys.var_is_required" alias="is_required" /></div>
<div> <column name="extra_keys.var_search" alias="search" /></div>
<div> <column name="extra_keys.var_default" alias="default" /></div>
<div> <column name="extra_keys.var_desc" alias="desc" /></div>
<div> <column name="extra_keys.var_idx" alias="idx" /></div>
<div> <column name="extra_vars.document_srl" alias="document_srl" /></div>
<div> <column name="extra_vars.lang_code" alias="lang_code" /></div>
<div> <column name="extra_vars.value" alias="value" /></div>
<div> <column name="extra_keys.eid" alias="eid" /></div>
<div> </columns></div>
<div> <navigation></div>
<div> <index var="sort_index" default="extra_keys.var_idx" order="asc" /></div>
<div> </navigation></div>
<div></query></div>
<div><br></div>
<p></p></div><h3 id="1249368742400-5">Insert 예제</h3><div class="eArea xe_content xe_dr_txt"><ul>
<li>
<p>document.insertCategory : 문서 카테고리 추가</p>
<ol class="code">
<li><query id="insertCategory" action="insert"><br><tables><br> <table name="document_categories" /><br></tables><br><br><columns><br> <column name="category_srl" var="category_srl" filter="number" notnull="notnull" /><br> <column name="module_srl" var="module_srl" filter="number" default="0" notnull="notnull" /><br> <column name="title" var="title" notnull="notnull" minlength="2" maxlength="250" /><br> <column name="document_count" var="document_count" default="0" /><br> <column name="regdate" var="regdate" default="curdate()" /><br> <column name="last_update" var="last_update" default="curdate()" /><br> <column name="list_order" var="list_order" default="0" /><br></columns><br></query></li></ol></li></ul></div><h3 id="1249368742400-6">update 예제</h3><div class="eArea xe_content xe_dr_txt"><ul>
<li>
<p>document.updateCategory : 특정 카테고리의 제목이나 순서, 최근 수정일을 변경</p>
<ol class="code">
<li><query id="updateCategory" action="update"><br><tables><br> <table name="document_categories" /><br></tables><br><br><columns><br> <column name="title" var="title" /><br> <column name="list_order" var="list_order" /><br> <column name="last_update" var="last_update" default="curdate()" /><br></columns><br><br><conditions><br> <condition operation="equal" column="category_srl" var="category_srl" filter="number" notnull="notnull" /><br></conditions><br></query></li></ol></li></ul></div><h3 id="1249368742400-7">delete 예제</h3><div class="eArea xe_content xe_dr_txt"><ul>
<li>
<p>document.deleteCategory : 특정 카테고리를 삭제</p>
<ol class="code">
<li><query id="deleteCategory" action="delete"><br><tables><br> <table name="document_categories" /><br></tables><br><br><conditions><br> <condition operation="equal" column="category_srl" var="category_srl" filter="number" notnull="notnull" /><br></conditions><br></query></li></ol></li></ul></div><h3 id="1249368742400-7">Select Click Count 예제</h3><div class="eArea xe_content xe_dr_txt"><p>Select 시 조회수 등의 정수의 숫자 컬럼을 +1 하는 기능입니다.</p>
<p>Cubrid의 경우에는 incr()이라는 함수를 사용하고 다른 데이타베이스의 경우 해당 컬럼을 Select후 Update 합니다.</p>
<p>XE Core 1.2.6 이상 버전에서 지원하고 있습니다.</p>
<p></p>
<p>document.getDocument XML Query에 Click Count 를 적용해 본 예제입니다.</p>
<p>select시 정수 숫자 컬럼 node에 attribute는 click_count, 값은 Argument로 매핑되는 변수명을 기입합니다.</p>
<p></p></div><div class="eArea xe_content xe_dr_txt"><p><query id="getDocument" action="select"><br> <tables><br> <table name="documents" /><br> </tables></p>
<p> <columns><br> <column name="document_srl" /><br> <column name="module_srl" /><br> <column name="category_srl" /><br> <column name="lang_code" /><br> <column name="is_notice" /><br> <column name="is_secret" /><br> <column name="title" /><br> <column name="title_bold" /><br> <column name="title_color" /><br> <column name="content" /><br> <column name="readed_count" <b><span style="COLOR: rgb(255,0,0)">click_count="incr_readed_count"</span></b>/><br> <column name="voted_count" /><br> <column name="blamed_count" /><br> <column name="comment_count" /><br> <column name="trackback_count" /><br> <column name="uploaded_count" /><br> <column name="password" /><br> <column name="user_id" /><br> <column name="user_name" /><br> <column name="nick_name" /><br> <column name="member_srl" /><br> <column name="email_address" /><br> <column name="homepage" /><br> <column name="tags" /><br> <column name="extra_vars" /><br> <column name="regdate" /><br> <column name="last_update" /><br> <column name="last_updater" /><br> <column name="ipaddress" /><br> <column name="list_order" /><br> <column name="update_order" /><br> <column name="allow_comment" /><br> <column name="lock_comment" /><br> <column name="allow_trackback" /><br> <column name="notify_message" /><br> </columns><br> <conditions><br> <condition operation="equal" column="document_srl" var="document_srl" filter="number" notnull="notnull" /><br> </conditions><br></query></p>
<p></p></div><div class="eArea xe_content xe_dr_txt"><p>click_count 의 매핑변수 값이 true이면 해당 컬럼을 +1 증가합니다.</p></div><div class="eArea xe_content xe_dr_txt"><p></p>
<div>$args->document_srl = $this->document_srl;</div>
<div>$args-><span style="COLOR: rgb(255,0,0)">incr_readed_count</span> =<span style="COLOR: rgb(255,0,0)"> true</span>;</div>
<div>$output = executeQuery('document.getDocument', $args);</div>
<div><br></div>
<p></p></div>
|
하늘03 |
2010.06.03 18:35:09 |
|
|
|
복원
<div class="eArea xe_content xe_dr_txt"><P><A href="http://doc.xpressengine.com/classXmlQueryParser.html" target=_blank>http://doc.xpressengine.com/classXmlQueryParser.html</A> (클래스 구조)</P></div><div class="eArea xe_content xe_dr_index"><UL class=toc>
<LI class=toc3><A href="./?document_srl=18180631&mid=wiki&act=dispWikiEditPage&entry=1.+XML+Query+%EC%82%AC%EC%9A%A9%EB%B2%95#1249368742400-1">개요</A></LI>
<LI class=toc3><A href="./?document_srl=18180631&mid=wiki&act=dispWikiEditPage&entry=1.+XML+Query+%EC%82%AC%EC%9A%A9%EB%B2%95#1249368742400-2">사용법</A></LI>
<LI class=toc3><A href="./?document_srl=18180631&mid=wiki&act=dispWikiEditPage&entry=1.+XML+Query+%EC%82%AC%EC%9A%A9%EB%B2%95#h1249628444840">XML sample</A></LI>
<LI class=toc3><A href="./?document_srl=18180631&mid=wiki&act=dispWikiEditPage&entry=1.+XML+Query+%EC%82%AC%EC%9A%A9%EB%B2%95#Selectquery예제">Select query 예제</A></LI>
<LI class=toc3><A href="./?document_srl=18180631&mid=wiki&act=dispWikiEditPage&entry=1.+XML+Query+%EC%82%AC%EC%9A%A9%EB%B2%95#h1249627751923">Join Select 예제</A></LI>
<LI class=toc3><A href="./?document_srl=18180631&mid=wiki&act=dispWikiEditPage&entry=1.+XML+Query+%EC%82%AC%EC%9A%A9%EB%B2%95#h1249627778964">Letf Join Select 예제</A></LI>
<LI class=toc3><A href="./?document_srl=18180631&mid=wiki&act=dispWikiEditPage&entry=1.+XML+Query+%EC%82%AC%EC%9A%A9%EB%B2%95#1249368742400-5">Insert 예제</A></LI>
<LI class=toc3><A href="./?document_srl=18180631&mid=wiki&act=dispWikiEditPage&entry=1.+XML+Query+%EC%82%AC%EC%9A%A9%EB%B2%95#1249368742400-6">update 예제</A></LI>
<LI class=toc3><A href="./?document_srl=18180631&mid=wiki&act=dispWikiEditPage&entry=1.+XML+Query+%EC%82%AC%EC%9A%A9%EB%B2%95#1249368742400-7">delete 예제</A></LI>
<LI class=toc3><A href="./?document_srl=18180631&mid=wiki&act=dispWikiEditPage&entry=1.+XML+Query+%EC%82%AC%EC%9A%A9%EB%B2%95#1249368742400-7">Select Click Count 예제</A></LI></UL></div><div class="eArea xe_content xe_dr_hx"><H3 id=1249368742400-1>개요</H3></div><div class="eArea xe_content xe_dr_txt"><OL>
<LI>XpressEngine는 query문을 직접 사용하지 않습니다.</LI>
<LI>이는 다양한 DBMS를 지원하기 위해서입니다.</LI>
<LI>XML Query문의 확장자는 .xml 입니다.</LI></OL></div><div class="eArea xe_content xe_dr_hx"><H3 id=1249368742400-2>사용법</H3></div><div class="eArea xe_content xe_dr_txt"><P>모듈 또는 애드온, 플러그인등에서 아래와 같이 사용할 수 있습니다.<BR><BR> 1. $args->name = "zero";<BR> 2. $output = executeQuery("member.getMemberInfo", $args);<BR><BR>XML Query를 호출하여 실제 DB의 데이터를 받거나 조작하기 위해서 사용되는 executeQuery() 함수는 DB::executeQuery()의 alias입니다.<BR><BR> 1. function executeQuery($xml_query_name, $args = null);<BR><BR>첫번째 인자로 실행하고자 하는 xml query의 이름을 받게 됩니다.<BR>이름은 모듈명.쿼리ID 로 이루어집니다.<BR><BR>$args는 null일수도 있고 해당 xml query에서 필요시 stdclass의 variables type으로 변수의 key, value를 설정후 인자로 넘기게 됩니다.<BR><BR>결과는 Object class의 객체로 return 됩니다.<BR>쿼리 실패는 $output->toBool()이 false일 경우이고 true라면 쿼리는 정상적으로 실행이 된 것을 의미합니다.<BR>select문의 결과 데이터는 $output->data 변수에 담겨져 return 됩니다.</P></div><div class="eArea xe_content xe_dr_hx"><H3 id=h1249628444840>XML sample</H3></div><div class="eArea xe_content xe_dr_txt"><OL class=code>
<LI><query id="쿼리아이디" action="select|update|delete|insert"><BR> <tables><BR> <table name="원테이블이름" alias="alias" /><BR> ...<BR> </tables><BR><BR> <columns><BR> <column name="컬럼명" alias="alias" /><BR> ...<BR> </columns><BR><BR> <conditions><BR> <condition operation="조건걸" column="Column명" var="변수명" filter="필터형식" default="기본값" notnull="notnull" minlength="최소길이" maxlength="최대길이" pipe="연결연산자" /><BR> ...<BR> <group pipe="연결연산자"><BR> <condition operation="조건걸" column="Column명" var="변수명" filter="필터형식" default="기본값" notnull="notnull" minlength="최소길이" maxlength="최대길이" pipe="연결연산자" /><BR> ...<BR> </group><BR> ...<BR> </conditions><BR><BR> <navigation><BR> <index var="이름" default="기본값" order="desc|asc" /><BR> <list_count var="변수명" default="기본값" /><BR> <page_count var="변수명" default="기본값" /><BR> <page var="변수명" default="변수명" /><BR> </navigation><BR><BR> <groups><BR> <group column="GroupBy 대상" /><BR> </groups><BR></query></LI></OL></div><div class="eArea xe_content xe_dr_txt"><UL>
<LI>
<P><query> 의 attribute</P>
<UL>
<LI>id : 쿼리를 찾을 수 있는 아이디입니다. module.query_id 로 query xml 파일을 찾고 사용하게 됩니다.<BR>action : select, update, delete, insert 4가지 종류가 있습니다.</LI></UL>
<P> </P></LI>
<LI><tables>
<UL>
<LI>테이블 조인시 여러개의 <table> 을 사용할 수 있습니다.<BR>name : 원테이블 명 (제로보드XE에서 prefix는 무시) alias : join또는 다른 용도로 원테이블명을 바꾸어 사용할 경우</LI></UL></LI>
<LI><columns>
<UL>
<LI>처리하고자 하는 컬럼명을 입력하시면 됩니다. name : 컬럼명 alias : 다른 이름으로 바꾸어 결과를 만들고자 할 경우 지정</LI></UL></LI>
<LI><conditions>
<UL>
<LI>조건절을 구성합니다.</LI>
<LI>조건절을 여러개의 그룹으로 사용하고자 할 때에는 <group> 태그를 이용해서 묶어 주실 수 있습니다.</LI></UL></LI>
<LI><group> ... </group>
<UL>
<LI>조건절을 그룹으로 사용할 경우 pipe="and|or" 를 이용하여 그룹끼리의 조건을 지정할 수 있습니다.</LI></UL></LI>
<LI><condition>
<UL>
<LI>
<P>operation : 아래와 같은 연산자로 처리가 됩니다.</P>
<DIV style="BACKGROUND-COLOR: rgb(249,249,216)" class=section>equal : column = (var|default)<BR>more : column >= (var|default)<BR>excess : column > (var|default)<BR>less : column <= (var|default)<BR>below : column < (var|default)<BR>notequal : column != (var|default)<BR>notnull : column is not null<BR>null : column is null<BR>like_prefix : column like '%var|default'<BR>like_tail : column like 'var|default%'<BR>like : column like '%var|default%'<BR>in : column in (var|default)</DIV>
<P> </P></LI>
<LI>column : 컬럼명을 지정할 수 있습니다.</LI>
<LI>var : executeQuery()함수에서 2번째 인자의 key값을 지정할 수 있습니다.</LI>
<LI>
<P>filter : var 값의 조건을 filtering합니다. 아래와 같은 filter를 지원합니다.</P>
<DIV style="BACKGROUND-COLOR: rgb(249,249,216)" class=section>email, email_address : 메일 형식<BR>homepage : http|https://등의 홈페이지 형식<BR>userid, user_id : 제로보드XE의 사용자 아이디 형식 (첫글자는 영문, 2번째부터는 숫자+영문+_)<BR>number : 숫자만 허용<BR>alpha : 영문자만 허용<BR>alpha_number : 숫자+영문자만 허용</DIV></LI>
<LI>
<P>default : var값이 null일 경우 default값으로 대체됩니다. 아래와 같은 함수값을 가질 수도 있습니다.</P>
<DIV style="BACKGROUND-COLOR: rgb(249,249,216)" class=section>ipaddress() : 접속자의 ip 주소<BR>unixtime() : unix time (php의 time()함수)<BR>curdate() : YYYYMMDDHHIISS<BR>plus(int count) : column = column + count<BR>minus(int count) : column = column - count</DIV></LI>
<LI>notnull : not null check를 하게 됩니다. minlength : 최소길이 체크 maxlength : 최대길이 체크 pipe : and|or등의 조건을 지정할 수 있습니다.</LI></UL></LI>
<LI>
<P><navigation> : navigation은 정렬순서(order by) 또는 페이징을 지원합니다.</P>
<UL>
<LI>
<P><index> 정렬할 컬럼과 정렬방법을 지정할 수 있습니다.</P>
<DIV style="BACKGROUND-COLOR: rgb(249,249,216)" class=section>var : 대상 컬럼명을 담은 변수명<BR>default : var값이 없을 경우 기본으로 정렬할 컬럼명 지정<BR>order : asc|desc</DIV></LI>
<LI>
<P><list_count> 페이징을 한 결과를 받을 수 있습니다.</P>
<DIV style="BACKGROUND-COLOR: rgb(249,249,216)" class=section>var : 목록의 rows를 지정<BR>default : var값이 없을 경우 기본 rows 값</DIV></LI>
<LI>
<P><page_count> 페이징 계산시에 하단 페이지 네비게이션의 수를 지정</P>
<DIV style="BACKGROUND-COLOR: rgb(249,249,216)" class=section>var : 페이징 네비게이션의 수<BR>default : var값이 없을 경우 기본 페이징 네비게이션의 수</DIV></LI>
<LI>
<P><page> 현재 몇번째 페이지인지를 지정할 수 있습니다.</P>
<DIV style="BACKGROUND-COLOR: rgb(249,249,216)" class=section>var : 현재 몇번째 페이지인지를 지정할 변수<BR>default : var값이 지정되지 않았을 경우 페이지 번호</DIV></LI></UL>
<P> </P></LI>
<LI><groups> : group by 절을 사용할 수 있습니다.</LI></UL></div><div class="eArea xe_content xe_dr_hx"><H3 id=Selectquery예제>Select query 예제</H3></div><div class="eArea xe_content xe_dr_txt"><UL>
<LI>
<P>member.getMemberList : member테이블에서 특정 조건을 가진 회원들을 페이징을 하면서 select</P>
<OL class=code>
<LI><query id="getMemberList" action="select"><BR><tables><BR> <table name="member" /><BR></tables></LI>
<LI><BR><columns><BR> <column name="*" /><BR></columns></LI>
<LI><BR><conditions><BR> <condition operation="equal" column="is_admin" var="is_admin" /><BR> <condition operation="equal" column="denied" var="is_denied" pipe="and" /><BR> <group pipe="and"><BR> <condition operation="like" column="user_id" var="s_user_id" /><BR> <condition operation="like" column="user_name" var="s_user_name" pipe="or" /><BR> <condition operation="like" column="nick_name" var="s_nick_name" pipe="or" /><BR> <condition operation="like" column="email_address" var="s_email_address" pipe="or" /><BR> <condition operation="like_prefix" column="regdate" var="s_regdate" pipe="or" /><BR> <condition operation="like_prefix" column="last_login" var="s_last_login" pipe="or" /><BR> </group><BR></conditions><BR><BR><navigation><BR> <index var="sort_index" default="member_srl" order="desc" /><BR> <list_count var="list_count" default="20" /><BR> <page_count var="page_count" default="10" /><BR> <page var="page" default="1" /><BR></navigation><BR></query></LI></OL></LI>
<LI>document.getMonthlyArchivedList : 모듈을 '년월'일을 기준으로 group by 한 결과를 가져옴</LI></UL></div><div class="eArea xe_content xe_dr_txt"><OL style="MARGIN-LEFT: 2em" class=code>
<LI><query id="getMonthlyArchivedList" action="select"><BR><tables><BR> <table name="documents" /><BR></tables><BR><BR><columns><BR> <column name="substr(regdate,1,6)" alias="month"/><BR> <column name="count(*)" alias="count" /><BR></columns><BR><BR><conditions><BR> <condition operation="in" column="module_srl" var="module_srl" filter="number" /><BR></conditions><BR><BR><groups><BR> <group column="substr(regdate,1,6)" /><BR></groups><BR></query></LI></OL></div><div class="eArea xe_content xe_dr_hx"><H3 id=h1249627751923>Join Select 예제</H3></div><div class="eArea xe_content xe_dr_txt"><P>document.getTrashList 예제입니다.</P></div><div class="eArea xe_content xe_dr_txt"><P></P>
<DIV><query id="getTrashList" action="select"></DIV>
<DIV> <tables></DIV>
<DIV> <table name="documents" /></DIV>
<DIV> <table name="document_trash" /></DIV>
<DIV> </tables></DIV>
<DIV> <columns></DIV>
<DIV> <column name="documents.*" /></DIV>
<DIV> <column name="document_trash.trash_srl" alias="trash_srl" /></DIV>
<DIV> <column name="document_trash.module_srl" alias="module_srl" /></DIV>
<DIV> <column name="document_trash.trash_date" alias="trash_date" /></DIV>
<DIV> <column name="document_trash.description" alias="trash_description" /></DIV>
<DIV> <column name="document_trash.ipaddress" alias="trash_ipaddress" /></DIV>
<DIV> <column name="document_trash.user_id" alias="trash_user_id" /></DIV>
<DIV> <column name="document_trash.user_name" alias="trash_user_name" /></DIV>
<DIV> <column name="document_trash.nick_name" alias="trash_nick_name" /></DIV>
<DIV> <column name="document_trash.member_srl" alias="trash_member_srl" /></DIV>
<DIV> </columns></DIV>
<DIV> <conditions></DIV>
<DIV> <condition operation="equal" column="document_trash.document_srl" default="documents.document_srl" notnull="notnull" /></DIV>
<DIV> <condition operation="in" column="document_trash.module_srl" var="module_srl" filter="number" pipe="and" /></DIV>
<DIV> <condition operation="equal" column="document_trash.member_srl" var="member_srl" filter="number" pipe="and" /></DIV>
<DIV><BR></DIV>
<DIV> <group pipe="and"></DIV>
<DIV> <condition operation="like" column="documents.title" var="s_title" /></DIV>
<DIV> <condition operation="like" column="documents.content" var="s_content" pipe="or" /></DIV>
<DIV> <condition operation="like" column="documents.user_name" var="s_user_name" pipe="or" /></DIV>
<DIV> <condition operation="like" column="documents.user_id" var="s_user_id" pipe="or" /></DIV>
<DIV> <condition operation="like" column="documents.nick_name" var="s_nick_name" pipe="or" /></DIV>
<DIV> <condition operation="like" column="documents.email_address" var="s_email_addres" pipe="or" /></DIV>
<DIV> <condition operation="like" column="documents.homepage" var="s_homepage" pipe="or" /></DIV>
<DIV> <condition operation="like" column="documents.tags" var="s_tags" pipe="or" /></DIV>
<DIV> <condition operation="equal" column="documents.is_secret" var="s_is_secret" pipe="or" /></DIV>
<DIV> <condition operation="equal" column="documents.member_srl" var="s_member_srl" pipe="or" /></DIV>
<DIV> <condition operation="more" column="documents.readed_count" var="s_readed_count" pipe="or" /></DIV>
<DIV> <condition operation="more" column="documents.voted_count" var="s_voted_count" pipe="or" /></DIV>
<DIV> <condition operation="more" column="documents.comment_count" var="s_comment_count" pipe="or" /></DIV>
<DIV> <condition operation="more" column="documents.trackback_count" var="s_trackback_count" pipe="or" /></DIV>
<DIV> <condition operation="more" column="documents.uploaded_count" var="s_uploaded_count" pipe="or" /></DIV>
<DIV> <condition operation="like_prefix" column="documents.regdate" var="s_regdate" pipe="or" /></DIV>
<DIV> <condition operation="like_prefix" column="documents.last_update" var="s_last_update" pipe="or" /></DIV>
<DIV> <condition operation="like_prefix" column="documents.ipaddress" var="s_ipaddress" pipe="or" /></DIV>
<DIV> </group></DIV>
<DIV><BR></DIV>
<DIV><BR></DIV>
<DIV> </conditions></DIV>
<DIV> <navigation></DIV>
<DIV> <index var="sort_index" default="documents.list_order" order="order_type" /></DIV>
<DIV> <list_count var="list_count" default="20" /></DIV>
<DIV> <page_count var="page_count" default="10" /></DIV>
<DIV> <page var="page" default="1" /></DIV>
<DIV> </navigation></DIV>
<DIV></query></DIV>
<P></P></div><div class="eArea xe_content xe_dr_hx"><H3 id=h1249627778964>Letf Join Select 예제</H3></div><div class="eArea xe_content xe_dr_txt"><P></P>
<DIV><query id="getDocumentsExtraVars" action="select"></DIV>
<DIV> <tables></DIV>
<DIV> <table name="document_extra_keys" alias="extra_keys" /></DIV>
<DIV> <table name="document_extra_vars" alias="extra_vars" type="left join"></DIV>
<DIV> <conditions></DIV>
<DIV> <condition operation="equal" column="extra_keys.module_srl" default="extra_vars.module_srl" /></DIV>
<DIV> <condition operation="in" column="extra_vars.document_srl" var="document_srl" pipe="and" /></DIV>
<DIV> <condition operation="equal" column="extra_keys.eid" default="extra_vars.eid" pipe="and" /></DIV>
<DIV> </conditions></DIV>
<DIV> </table></DIV>
<DIV> </tables></DIV>
<DIV> <columns></DIV>
<DIV> <column name="extra_keys.module_srl" alias="module_srl" /></DIV>
<DIV> <column name="extra_keys.var_name" alias="name" /></DIV>
<DIV> <column name="extra_keys.var_type" alias="type" /></DIV>
<DIV> <column name="extra_keys.var_is_required" alias="is_required" /></DIV>
<DIV> <column name="extra_keys.var_search" alias="search" /></DIV>
<DIV> <column name="extra_keys.var_default" alias="default" /></DIV>
<DIV> <column name="extra_keys.var_desc" alias="desc" /></DIV>
<DIV> <column name="extra_keys.var_idx" alias="idx" /></DIV>
<DIV> <column name="extra_vars.document_srl" alias="document_srl" /></DIV>
<DIV> <column name="extra_vars.lang_code" alias="lang_code" /></DIV>
<DIV> <column name="extra_vars.value" alias="value" /></DIV>
<DIV> <column name="extra_keys.eid" alias="eid" /></DIV>
<DIV> </columns></DIV>
<DIV> <navigation></DIV>
<DIV> <index var="sort_index" default="extra_keys.var_idx" order="asc" /></DIV>
<DIV> </navigation></DIV>
<DIV></query></DIV>
<DIV><BR></DIV>
<P></P></div><div class="eArea xe_content xe_dr_hx"><H3 id=1249368742400-5>Insert 예제</H3></div><div class="eArea xe_content xe_dr_txt"><UL>
<LI>
<P>document.insertCategory : 문서 카테고리 추가</P>
<OL class=code>
<LI><query id="insertCategory" action="insert"><BR><tables><BR> <table name="document_categories" /><BR></tables><BR><BR><columns><BR> <column name="category_srl" var="category_srl" filter="number" notnull="notnull" /><BR> <column name="module_srl" var="module_srl" filter="number" default="0" notnull="notnull" /><BR> <column name="title" var="title" notnull="notnull" minlength="2" maxlength="250" /><BR> <column name="document_count" var="document_count" default="0" /><BR> <column name="regdate" var="regdate" default="curdate()" /><BR> <column name="last_update" var="last_update" default="curdate()" /><BR> <column name="list_order" var="list_order" default="0" /><BR></columns><BR></query></LI></OL></LI></UL></div><div class="eArea xe_content xe_dr_hx"><H3 id=1249368742400-6>update 예제</H3></div><div class="eArea xe_content xe_dr_txt"><UL>
<LI>
<P>document.updateCategory : 특정 카테고리의 제목이나 순서, 최근 수정일을 변경</P>
<OL class=code>
<LI><query id="updateCategory" action="update"><BR><tables><BR> <table name="document_categories" /><BR></tables><BR><BR><columns><BR> <column name="title" var="title" /><BR> <column name="list_order" var="list_order" /><BR> <column name="last_update" var="last_update" default="curdate()" /><BR></columns><BR><BR><conditions><BR> <condition operation="equal" column="category_srl" var="category_srl" filter="number" notnull="notnull" /><BR></conditions><BR></query></LI></OL></LI></UL></div><div class="eArea xe_content xe_dr_hx"><H3 id=1249368742400-7>delete 예제</H3></div><div class="eArea xe_content xe_dr_txt"><UL>
<LI>
<P>document.deleteCategory : 특정 카테고리를 삭제</P>
<OL class=code>
<LI><query id="deleteCategory" action="delete"><BR><tables><BR> <table name="document_categories" /><BR></tables><BR><BR><conditions><BR> <condition operation="equal" column="category_srl" var="category_srl" filter="number" notnull="notnull" /><BR></conditions><BR></query></LI></OL></LI></UL></div><div class="eArea xe_content xe_dr_hx"><H3 id=1249368742400-7>Select Click Count 예제</H3></div><div class="eArea xe_content xe_dr_txt"><P>Select 시 조회수 등의 정수의 숫자 컬럼을 +1 하는 기능입니다.</P>
<P>Cubrid의 경우에는 incr()이라는 함수를 사용하고 다른 데이타베이스의 경우 해당 컬럼을 Select후 Update 합니다.</P>
<P>XE Core 1.2.6 이상 버전에서 지원하고 있습니다.</P>
<P></P>
<P>document.getDocument XML Query에 Click Count 를 적용해 본 예제입니다.</P>
<P>select시 정수 숫자 컬럼 node에 attribute는 click_count, 값은 Argument로 매핑되는 변수명을 기입합니다.</P>
<P></P></div><div class="eArea xe_content xe_dr_txt"><P><query id="getDocument" action="select"><BR> <tables><BR> <table name="documents" /><BR> </tables></P>
<P> <columns><BR> <column name="document_srl" /><BR> <column name="module_srl" /><BR> <column name="category_srl" /><BR> <column name="lang_code" /><BR> <column name="is_notice" /><BR> <column name="is_secret" /><BR> <column name="title" /><BR> <column name="title_bold" /><BR> <column name="title_color" /><BR> <column name="content" /><BR> <column name="readed_count" <B><SPAN style="COLOR: rgb(255,0,0)">click_count="incr_readed_count"</SPAN></B>/><BR> <column name="voted_count" /><BR> <column name="blamed_count" /><BR> <column name="comment_count" /><BR> <column name="trackback_count" /><BR> <column name="uploaded_count" /><BR> <column name="password" /><BR> <column name="user_id" /><BR> <column name="user_name" /><BR> <column name="nick_name" /><BR> <column name="member_srl" /><BR> <column name="email_address" /><BR> <column name="homepage" /><BR> <column name="tags" /><BR> <column name="extra_vars" /><BR> <column name="regdate" /><BR> <column name="last_update" /><BR> <column name="last_updater" /><BR> <column name="ipaddress" /><BR> <column name="list_order" /><BR> <column name="update_order" /><BR> <column name="allow_comment" /><BR> <column name="lock_comment" /><BR> <column name="allow_trackback" /><BR> <column name="notify_message" /><BR> </columns><BR> <conditions><BR> <condition operation="equal" column="document_srl" var="document_srl" filter="number" notnull="notnull" /><BR> </conditions><BR></query></P>
<P></P></div><div class="eArea xe_content xe_dr_txt"><P>click_count 의 매핑변수 값이 true이면 해당 컬럼을 +1 증가합니다.</P></div><div class="eArea xe_content xe_dr_txt"><P></P>
<DIV>$args->document_srl = $this->document_srl;</DIV>
<DIV>$args-><SPAN style="COLOR: rgb(255,0,0)">incr_readed_count</SPAN> =<SPAN style="COLOR: rgb(255,0,0)"> true</SPAN>;</DIV>
<DIV>$output = executeQuery('document.getDocument', $args);</DIV>
<DIV><BR></DIV>
<P></P></div>
|
미니미 |
2009.12.07 19:20:26 |
|
|
|
복원
<div class="eArea xe_content xe_dr_txt"><P><A href="http://doc.xpreessengine.com/classXmlQueryParser.html" target=_blank>http://doc.xpreessengine.com/classXmlQueryParser.html</A> (클래스 구조)</P></div><div class="eArea xe_content xe_dr_index"><UL class=toc>
<LI class=toc3><A href="./?document_srl=18180631&mid=wiki&act=dispWikiEditPage&entry=1.+XML+Query+%EC%82%AC%EC%9A%A9%EB%B2%95#1249368742400-1">개요</A></LI>
<LI class=toc3><A href="./?document_srl=18180631&mid=wiki&act=dispWikiEditPage&entry=1.+XML+Query+%EC%82%AC%EC%9A%A9%EB%B2%95#1249368742400-2">사용법</A></LI>
<LI class=toc3><A href="./?document_srl=18180631&mid=wiki&act=dispWikiEditPage&entry=1.+XML+Query+%EC%82%AC%EC%9A%A9%EB%B2%95#h1249628444840">XML sample</A></LI>
<LI class=toc3><A href="./?document_srl=18180631&mid=wiki&act=dispWikiEditPage&entry=1.+XML+Query+%EC%82%AC%EC%9A%A9%EB%B2%95#Selectquery예제">Select query 예제</A></LI>
<LI class=toc3><A href="./?document_srl=18180631&mid=wiki&act=dispWikiEditPage&entry=1.+XML+Query+%EC%82%AC%EC%9A%A9%EB%B2%95#h1249627751923">Join Select 예제</A></LI>
<LI class=toc3><A href="./?document_srl=18180631&mid=wiki&act=dispWikiEditPage&entry=1.+XML+Query+%EC%82%AC%EC%9A%A9%EB%B2%95#h1249627778964">Letf Join Select 예제</A></LI>
<LI class=toc3><A href="./?document_srl=18180631&mid=wiki&act=dispWikiEditPage&entry=1.+XML+Query+%EC%82%AC%EC%9A%A9%EB%B2%95#1249368742400-5">Insert 예제</A></LI>
<LI class=toc3><A href="./?document_srl=18180631&mid=wiki&act=dispWikiEditPage&entry=1.+XML+Query+%EC%82%AC%EC%9A%A9%EB%B2%95#1249368742400-6">update 예제</A></LI>
<LI class=toc3><A href="./?document_srl=18180631&mid=wiki&act=dispWikiEditPage&entry=1.+XML+Query+%EC%82%AC%EC%9A%A9%EB%B2%95#1249368742400-7">delete 예제</A></LI>
<LI class=toc3><A href="./?document_srl=18180631&mid=wiki&act=dispWikiEditPage&entry=1.+XML+Query+%EC%82%AC%EC%9A%A9%EB%B2%95#1249368742400-7">Select Click Count 예제</A></LI></UL></div><div class="eArea xe_content xe_dr_hx"><H3 id=1249368742400-1>개요</H3></div><div class="eArea xe_content xe_dr_txt"><OL>
<LI>XpressEngine는 query문을 직접 사용하지 않습니다.</LI>
<LI>이는 다양한 DBMS를 지원하기 위해서입니다.</LI>
<LI>XML Query문의 확장자는 .xml 입니다.</LI></OL></div><div class="eArea xe_content xe_dr_hx"><H3 id=1249368742400-2>사용법</H3></div><div class="eArea xe_content xe_dr_txt"><P>모듈 또는 애드온, 플러그인등에서 아래와 같이 사용할 수 있습니다.<BR><BR> 1. $args->name = "zero";<BR> 2. $output = executeQuery("member.getMemberInfo", $args);<BR><BR>XML Query를 호출하여 실제 DB의 데이터를 받거나 조작하기 위해서 사용되는 executeQuery() 함수는 DB::executeQuery()의 alias입니다.<BR><BR> 1. function executeQuery($xml_query_name, $args = null);<BR><BR>첫번째 인자로 실행하고자 하는 xml query의 이름을 받게 됩니다.<BR>이름은 모듈명.쿼리ID 로 이루어집니다.<BR><BR>$args는 null일수도 있고 해당 xml query에서 필요시 stdclass의 variables type으로 변수의 key, value를 설정후 인자로 넘기게 됩니다.<BR><BR>결과는 Object class의 객체로 return 됩니다.<BR>쿼리 실패는 $output->toBool()이 false일 경우이고 true라면 쿼리는 정상적으로 실행이 된 것을 의미합니다.<BR>select문의 결과 데이터는 $output->data 변수에 담겨져 return 됩니다.</P></div><div class="eArea xe_content xe_dr_hx"><H3 id=h1249628444840>XML sample</H3></div><div class="eArea xe_content xe_dr_txt"><OL class=code>
<LI><query id="쿼리아이디" action="select|update|delete|insert"><BR> <tables><BR> <table name="원테이블이름" alias="alias" /><BR> ...<BR> </tables><BR><BR> <columns><BR> <column name="컬럼명" alias="alias" /><BR> ...<BR> </columns><BR><BR> <conditions><BR> <condition operation="조건걸" column="Column명" var="변수명" filter="필터형식" default="기본값" notnull="notnull" minlength="최소길이" maxlength="최대길이" pipe="연결연산자" /><BR> ...<BR> <group pipe="연결연산자"><BR> <condition operation="조건걸" column="Column명" var="변수명" filter="필터형식" default="기본값" notnull="notnull" minlength="최소길이" maxlength="최대길이" pipe="연결연산자" /><BR> ...<BR> </group><BR> ...<BR> </conditions><BR><BR> <navigation><BR> <index var="이름" default="기본값" order="desc|asc" /><BR> <list_count var="변수명" default="기본값" /><BR> <page_count var="변수명" default="기본값" /><BR> <page var="변수명" default="변수명" /><BR> </navigation><BR><BR> <groups><BR> <group column="GroupBy 대상" /><BR> </groups><BR></query></LI></OL></div><div class="eArea xe_content xe_dr_txt"><UL>
<LI>
<P><query> 의 attribute</P>
<UL>
<LI>id : 쿼리를 찾을 수 있는 아이디입니다. module.query_id 로 query xml 파일을 찾고 사용하게 됩니다.<BR>action : select, update, delete, insert 4가지 종류가 있습니다.</LI></UL>
<P> </P></LI>
<LI><tables>
<UL>
<LI>테이블 조인시 여러개의 <table> 을 사용할 수 있습니다.<BR>name : 원테이블 명 (제로보드XE에서 prefix는 무시) alias : join또는 다른 용도로 원테이블명을 바꾸어 사용할 경우</LI></UL></LI>
<LI><columns>
<UL>
<LI>처리하고자 하는 컬럼명을 입력하시면 됩니다. name : 컬럼명 alias : 다른 이름으로 바꾸어 결과를 만들고자 할 경우 지정</LI></UL></LI>
<LI><conditions>
<UL>
<LI>조건절을 구성합니다.</LI>
<LI>조건절을 여러개의 그룹으로 사용하고자 할 때에는 <group> 태그를 이용해서 묶어 주실 수 있습니다.</LI></UL></LI>
<LI><group> ... </group>
<UL>
<LI>조건절을 그룹으로 사용할 경우 pipe="and|or" 를 이용하여 그룹끼리의 조건을 지정할 수 있습니다.</LI></UL></LI>
<LI><condition>
<UL>
<LI>
<P>operation : 아래와 같은 연산자로 처리가 됩니다.</P>
<DIV style="BACKGROUND-COLOR: rgb(249,249,216)" class=section>equal : column = (var|default)<BR>more : column >= (var|default)<BR>excess : column > (var|default)<BR>less : column <= (var|default)<BR>below : column < (var|default)<BR>notequal : column != (var|default)<BR>notnull : column is not null<BR>null : column is null<BR>like_prefix : column like '%var|default'<BR>like_tail : column like 'var|default%'<BR>like : column like '%var|default%'<BR>in : column in (var|default)</DIV>
<P> </P></LI>
<LI>column : 컬럼명을 지정할 수 있습니다.</LI>
<LI>var : executeQuery()함수에서 2번째 인자의 key값을 지정할 수 있습니다.</LI>
<LI>
<P>filter : var 값의 조건을 filtering합니다. 아래와 같은 filter를 지원합니다.</P>
<DIV style="BACKGROUND-COLOR: rgb(249,249,216)" class=section>email, email_address : 메일 형식<BR>homepage : http|https://등의 홈페이지 형식<BR>userid, user_id : 제로보드XE의 사용자 아이디 형식 (첫글자는 영문, 2번째부터는 숫자+영문+_)<BR>number : 숫자만 허용<BR>alpha : 영문자만 허용<BR>alpha_number : 숫자+영문자만 허용</DIV></LI>
<LI>
<P>default : var값이 null일 경우 default값으로 대체됩니다. 아래와 같은 함수값을 가질 수도 있습니다.</P>
<DIV style="BACKGROUND-COLOR: rgb(249,249,216)" class=section>ipaddress() : 접속자의 ip 주소<BR>unixtime() : unix time (php의 time()함수)<BR>curdate() : YYYYMMDDHHIISS<BR>plus(int count) : column = column + count<BR>minus(int count) : column = column - count</DIV></LI>
<LI>notnull : not null check를 하게 됩니다. minlength : 최소길이 체크 maxlength : 최대길이 체크 pipe : and|or등의 조건을 지정할 수 있습니다.</LI></UL></LI>
<LI>
<P><navigation> : navigation은 정렬순서(order by) 또는 페이징을 지원합니다.</P>
<UL>
<LI>
<P><index> 정렬할 컬럼과 정렬방법을 지정할 수 있습니다.</P>
<DIV style="BACKGROUND-COLOR: rgb(249,249,216)" class=section>var : 대상 컬럼명을 담은 변수명<BR>default : var값이 없을 경우 기본으로 정렬할 컬럼명 지정<BR>order : asc|desc</DIV></LI>
<LI>
<P><list_count> 페이징을 한 결과를 받을 수 있습니다.</P>
<DIV style="BACKGROUND-COLOR: rgb(249,249,216)" class=section>var : 목록의 rows를 지정<BR>default : var값이 없을 경우 기본 rows 값</DIV></LI>
<LI>
<P><page_count> 페이징 계산시에 하단 페이지 네비게이션의 수를 지정</P>
<DIV style="BACKGROUND-COLOR: rgb(249,249,216)" class=section>var : 페이징 네비게이션의 수<BR>default : var값이 없을 경우 기본 페이징 네비게이션의 수</DIV></LI>
<LI>
<P><page> 현재 몇번째 페이지인지를 지정할 수 있습니다.</P>
<DIV style="BACKGROUND-COLOR: rgb(249,249,216)" class=section>var : 현재 몇번째 페이지인지를 지정할 변수<BR>default : var값이 지정되지 않았을 경우 페이지 번호</DIV></LI></UL>
<P> </P></LI>
<LI><groups> : group by 절을 사용할 수 있습니다.</LI></UL></div><div class="eArea xe_content xe_dr_hx"><H3 id=Selectquery예제>Select query 예제</H3></div><div class="eArea xe_content xe_dr_txt"><UL>
<LI>
<P>member.getMemberList : member테이블에서 특정 조건을 가진 회원들을 페이징을 하면서 select</P>
<OL class=code>
<LI><query id="getMemberList" action="select"><BR><tables><BR> <table name="member" /><BR></tables></LI>
<LI><BR><columns><BR> <column name="*" /><BR></columns></LI>
<LI><BR><conditions><BR> <condition operation="equal" column="is_admin" var="is_admin" /><BR> <condition operation="equal" column="denied" var="is_denied" pipe="and" /><BR> <group pipe="and"><BR> <condition operation="like" column="user_id" var="s_user_id" /><BR> <condition operation="like" column="user_name" var="s_user_name" pipe="or" /><BR> <condition operation="like" column="nick_name" var="s_nick_name" pipe="or" /><BR> <condition operation="like" column="email_address" var="s_email_address" pipe="or" /><BR> <condition operation="like_prefix" column="regdate" var="s_regdate" pipe="or" /><BR> <condition operation="like_prefix" column="last_login" var="s_last_login" pipe="or" /><BR> </group><BR></conditions><BR><BR><navigation><BR> <index var="sort_index" default="member_srl" order="desc" /><BR> <list_count var="list_count" default="20" /><BR> <page_count var="page_count" default="10" /><BR> <page var="page" default="1" /><BR></navigation><BR></query></LI></OL></LI>
<LI>document.getMonthlyArchivedList : 모듈을 '년월'일을 기준으로 group by 한 결과를 가져옴</LI></UL></div><div class="eArea xe_content xe_dr_txt"><OL style="MARGIN-LEFT: 2em" class=code>
<LI><query id="getMonthlyArchivedList" action="select"><BR><tables><BR> <table name="documents" /><BR></tables><BR><BR><columns><BR> <column name="substr(regdate,1,6)" alias="month"/><BR> <column name="count(*)" alias="count" /><BR></columns><BR><BR><conditions><BR> <condition operation="in" column="module_srl" var="module_srl" filter="number" /><BR></conditions><BR><BR><groups><BR> <group column="substr(regdate,1,6)" /><BR></groups><BR></query></LI></OL></div><div class="eArea xe_content xe_dr_hx"><H3 id=h1249627751923>Join Select 예제</H3></div><div class="eArea xe_content xe_dr_txt"><P>document.getTrashList 예제입니다.</P></div><div class="eArea xe_content xe_dr_txt"><P></P>
<DIV><query id="getTrashList" action="select"></DIV>
<DIV> <tables></DIV>
<DIV> <table name="documents" /></DIV>
<DIV> <table name="document_trash" /></DIV>
<DIV> </tables></DIV>
<DIV> <columns></DIV>
<DIV> <column name="documents.*" /></DIV>
<DIV> <column name="document_trash.trash_srl" alias="trash_srl" /></DIV>
<DIV> <column name="document_trash.module_srl" alias="module_srl" /></DIV>
<DIV> <column name="document_trash.trash_date" alias="trash_date" /></DIV>
<DIV> <column name="document_trash.description" alias="trash_description" /></DIV>
<DIV> <column name="document_trash.ipaddress" alias="trash_ipaddress" /></DIV>
<DIV> <column name="document_trash.user_id" alias="trash_user_id" /></DIV>
<DIV> <column name="document_trash.user_name" alias="trash_user_name" /></DIV>
<DIV> <column name="document_trash.nick_name" alias="trash_nick_name" /></DIV>
<DIV> <column name="document_trash.member_srl" alias="trash_member_srl" /></DIV>
<DIV> </columns></DIV>
<DIV> <conditions></DIV>
<DIV> <condition operation="equal" column="document_trash.document_srl" default="documents.document_srl" notnull="notnull" /></DIV>
<DIV> <condition operation="in" column="document_trash.module_srl" var="module_srl" filter="number" pipe="and" /></DIV>
<DIV> <condition operation="equal" column="document_trash.member_srl" var="member_srl" filter="number" pipe="and" /></DIV>
<DIV><BR></DIV>
<DIV> <group pipe="and"></DIV>
<DIV> <condition operation="like" column="documents.title" var="s_title" /></DIV>
<DIV> <condition operation="like" column="documents.content" var="s_content" pipe="or" /></DIV>
<DIV> <condition operation="like" column="documents.user_name" var="s_user_name" pipe="or" /></DIV>
<DIV> <condition operation="like" column="documents.user_id" var="s_user_id" pipe="or" /></DIV>
<DIV> <condition operation="like" column="documents.nick_name" var="s_nick_name" pipe="or" /></DIV>
<DIV> <condition operation="like" column="documents.email_address" var="s_email_addres" pipe="or" /></DIV>
<DIV> <condition operation="like" column="documents.homepage" var="s_homepage" pipe="or" /></DIV>
<DIV> <condition operation="like" column="documents.tags" var="s_tags" pipe="or" /></DIV>
<DIV> <condition operation="equal" column="documents.is_secret" var="s_is_secret" pipe="or" /></DIV>
<DIV> <condition operation="equal" column="documents.member_srl" var="s_member_srl" pipe="or" /></DIV>
<DIV> <condition operation="more" column="documents.readed_count" var="s_readed_count" pipe="or" /></DIV>
<DIV> <condition operation="more" column="documents.voted_count" var="s_voted_count" pipe="or" /></DIV>
<DIV> <condition operation="more" column="documents.comment_count" var="s_comment_count" pipe="or" /></DIV>
<DIV> <condition operation="more" column="documents.trackback_count" var="s_trackback_count" pipe="or" /></DIV>
<DIV> <condition operation="more" column="documents.uploaded_count" var="s_uploaded_count" pipe="or" /></DIV>
<DIV> <condition operation="like_prefix" column="documents.regdate" var="s_regdate" pipe="or" /></DIV>
<DIV> <condition operation="like_prefix" column="documents.last_update" var="s_last_update" pipe="or" /></DIV>
<DIV> <condition operation="like_prefix" column="documents.ipaddress" var="s_ipaddress" pipe="or" /></DIV>
<DIV> </group></DIV>
<DIV><BR></DIV>
<DIV><BR></DIV>
<DIV> </conditions></DIV>
<DIV> <navigation></DIV>
<DIV> <index var="sort_index" default="documents.list_order" order="order_type" /></DIV>
<DIV> <list_count var="list_count" default="20" /></DIV>
<DIV> <page_count var="page_count" default="10" /></DIV>
<DIV> <page var="page" default="1" /></DIV>
<DIV> </navigation></DIV>
<DIV></query></DIV>
<P></P></div><div class="eArea xe_content xe_dr_hx"><H3 id=h1249627778964>Letf Join Select 예제</H3></div><div class="eArea xe_content xe_dr_txt"><P></P>
<DIV><query id="getDocumentsExtraVars" action="select"></DIV>
<DIV> <tables></DIV>
<DIV> <table name="document_extra_keys" alias="extra_keys" /></DIV>
<DIV> <table name="document_extra_vars" alias="extra_vars" type="left join"></DIV>
<DIV> <conditions></DIV>
<DIV> <condition operation="equal" column="extra_keys.module_srl" default="extra_vars.module_srl" /></DIV>
<DIV> <condition operation="in" column="extra_vars.document_srl" var="document_srl" pipe="and" /></DIV>
<DIV> <condition operation="equal" column="extra_keys.eid" default="extra_vars.eid" pipe="and" /></DIV>
<DIV> </conditions></DIV>
<DIV> </table></DIV>
<DIV> </tables></DIV>
<DIV> <columns></DIV>
<DIV> <column name="extra_keys.module_srl" alias="module_srl" /></DIV>
<DIV> <column name="extra_keys.var_name" alias="name" /></DIV>
<DIV> <column name="extra_keys.var_type" alias="type" /></DIV>
<DIV> <column name="extra_keys.var_is_required" alias="is_required" /></DIV>
<DIV> <column name="extra_keys.var_search" alias="search" /></DIV>
<DIV> <column name="extra_keys.var_default" alias="default" /></DIV>
<DIV> <column name="extra_keys.var_desc" alias="desc" /></DIV>
<DIV> <column name="extra_keys.var_idx" alias="idx" /></DIV>
<DIV> <column name="extra_vars.document_srl" alias="document_srl" /></DIV>
<DIV> <column name="extra_vars.lang_code" alias="lang_code" /></DIV>
<DIV> <column name="extra_vars.value" alias="value" /></DIV>
<DIV> <column name="extra_keys.eid" alias="eid" /></DIV>
<DIV> </columns></DIV>
<DIV> <navigation></DIV>
<DIV> <index var="sort_index" default="extra_keys.var_idx" order="asc" /></DIV>
<DIV> </navigation></DIV>
<DIV></query></DIV>
<DIV><BR></DIV>
<P></P></div><div class="eArea xe_content xe_dr_hx"><H3 id=1249368742400-5>Insert 예제</H3></div><div class="eArea xe_content xe_dr_txt"><UL>
<LI>
<P>document.insertCategory : 문서 카테고리 추가</P>
<OL class=code>
<LI><query id="insertCategory" action="insert"><BR><tables><BR> <table name="document_categories" /><BR></tables><BR><BR><columns><BR> <column name="category_srl" var="category_srl" filter="number" notnull="notnull" /><BR> <column name="module_srl" var="module_srl" filter="number" default="0" notnull="notnull" /><BR> <column name="title" var="title" notnull="notnull" minlength="2" maxlength="250" /><BR> <column name="document_count" var="document_count" default="0" /><BR> <column name="regdate" var="regdate" default="curdate()" /><BR> <column name="last_update" var="last_update" default="curdate()" /><BR> <column name="list_order" var="list_order" default="0" /><BR></columns><BR></query></LI></OL></LI></UL></div><div class="eArea xe_content xe_dr_hx"><H3 id=1249368742400-6>update 예제</H3></div><div class="eArea xe_content xe_dr_txt"><UL>
<LI>
<P>document.updateCategory : 특정 카테고리의 제목이나 순서, 최근 수정일을 변경</P>
<OL class=code>
<LI><query id="updateCategory" action="update"><BR><tables><BR> <table name="document_categories" /><BR></tables><BR><BR><columns><BR> <column name="title" var="title" /><BR> <column name="list_order" var="list_order" /><BR> <column name="last_update" var="last_update" default="curdate()" /><BR></columns><BR><BR><conditions><BR> <condition operation="equal" column="category_srl" var="category_srl" filter="number" notnull="notnull" /><BR></conditions><BR></query></LI></OL></LI></UL></div><div class="eArea xe_content xe_dr_hx"><H3 id=1249368742400-7>delete 예제</H3></div><div class="eArea xe_content xe_dr_txt"><UL>
<LI>
<P>document.deleteCategory : 특정 카테고리를 삭제</P>
<OL class=code>
<LI><query id="deleteCategory" action="delete"><BR><tables><BR> <table name="document_categories" /><BR></tables><BR><BR><conditions><BR> <condition operation="equal" column="category_srl" var="category_srl" filter="number" notnull="notnull" /><BR></conditions><BR></query></LI></OL></LI></UL></div><div class="eArea xe_content xe_dr_hx"><H3 id=1249368742400-7>Select Click Count 예제</H3></div><div class="eArea xe_content xe_dr_txt"><P>Select 시 조회수 등의 정수의 숫자 컬럼을 +1 하는 기능입니다.</P>
<P>Cubrid의 경우에는 incr()이라는 함수를 사용하고 다른 데이타베이스의 경우 해당 컬럼을 Select후 Update 합니다.</P>
<P>XE Core 1.2.6 이상 버전에서 지원하고 있습니다.</P>
<P></P>
<P>document.getDocument XML Query에 Click Count 를 적용해 본 예제입니다.</P>
<P>select시 정수 숫자 컬럼 node에 attribute는 click_count, 값은 Argument로 매핑되는 변수명을 기입합니다.</P>
<P></P></div><div class="eArea xe_content xe_dr_txt"><P><query id="getDocument" action="select"><BR> <tables><BR> <table name="documents" /><BR> </tables></P>
<P> <columns><BR> <column name="document_srl" /><BR> <column name="module_srl" /><BR> <column name="category_srl" /><BR> <column name="lang_code" /><BR> <column name="is_notice" /><BR> <column name="is_secret" /><BR> <column name="title" /><BR> <column name="title_bold" /><BR> <column name="title_color" /><BR> <column name="content" /><BR> <column name="readed_count" <B><SPAN style="COLOR: rgb(255,0,0)">click_count="incr_readed_count"</SPAN></B>/><BR> <column name="voted_count" /><BR> <column name="blamed_count" /><BR> <column name="comment_count" /><BR> <column name="trackback_count" /><BR> <column name="uploaded_count" /><BR> <column name="password" /><BR> <column name="user_id" /><BR> <column name="user_name" /><BR> <column name="nick_name" /><BR> <column name="member_srl" /><BR> <column name="email_address" /><BR> <column name="homepage" /><BR> <column name="tags" /><BR> <column name="extra_vars" /><BR> <column name="regdate" /><BR> <column name="last_update" /><BR> <column name="last_updater" /><BR> <column name="ipaddress" /><BR> <column name="list_order" /><BR> <column name="update_order" /><BR> <column name="allow_comment" /><BR> <column name="lock_comment" /><BR> <column name="allow_trackback" /><BR> <column name="notify_message" /><BR> </columns><BR> <conditions><BR> <condition operation="equal" column="document_srl" var="document_srl" filter="number" notnull="notnull" /><BR> </conditions><BR></query></P>
<P></P></div><div class="eArea xe_content xe_dr_txt"><P>click_count 의 매핑변수 값이 true이면 해당 컬럼을 +1 증가합니다.</P></div><div class="eArea xe_content xe_dr_txt"><P></P>
<DIV>$args->document_srl = $this->document_srl;</DIV>
<DIV>$args-><SPAN style="COLOR: rgb(255,0,0)">incr_readed_count</SPAN> =<SPAN style="COLOR: rgb(255,0,0)"> true</SPAN>;</DIV>
<DIV>$output = executeQuery('document.getDocument', $args);</DIV>
<DIV><BR></DIV>
<P></P></div>
|
미니미 |
2009.12.07 19:19:01 |
|
|
|
복원
<div class="eArea xe_content xe_dr_txt"><p><a href="http://doc.zeroboard.com/classXmlQueryParser.html" class="external" title="http://doc.zeroboard.com/classXmlQueryParser.html">http://doc.zeroboard.com/classXmlQueryParser.html</a> (클래스 구조)</p></div><div class="eArea xe_content xe_dr_index"><ul class="toc"><li class="toc3"><a href="#1249368742400-1">개요</a></li><li class="toc3"><a href="#1249368742400-2">사용법</a></li><li class="toc3"><a href="#h1249628444840">XML sample</a></li><li class="toc3"><a href="#Selectquery예제">Select query 예제</a></li><li class="toc3"><a href="#h1249627751923">Join Select 예제</a></li><li class="toc3"><a href="#h1249627778964">Letf Join Select 예제</a></li><li class="toc3"><a href="#1249368742400-5">Insert 예제</a></li><li class="toc3"><a href="#1249368742400-6">update 예제</a></li><li class="toc3"><a href="#1249368742400-7">delete 예제</a></li><li class="toc3"><a href="#1249368742400-7">Select Click Count 예제</a></li></ul></div><div class="eArea xe_content xe_dr_hx"><h3 id="1249368742400-1">개요</h3></div><div class="eArea xe_content xe_dr_txt"><ol>
<li>XpressEngine는 query문을 직접 사용하지 않습니다.</li>
<li>이는 다양한 DBMS를 지원하기 위해서입니다.</li>
<li>XML Query문의 확장자는 .xml 입니다.</li>
</ol></div><div class="eArea xe_content xe_dr_hx"><h3 id="1249368742400-2">사용법</h3></div><div class="eArea xe_content xe_dr_txt"><p>모듈 또는 애드온, 플러그인등에서 아래와 같이 사용할 수 있습니다.<br><br> 1. $args->name = "zero";<br> 2. $output = executeQuery("member.getMemberInfo", $args);<br><br>XML Query를 호출하여 실제 DB의 데이터를 받거나 조작하기 위해서 사용되는 executeQuery() 함수는 DB::executeQuery()의 alias입니다.<br><br> 1. function executeQuery($xml_query_name, $args = null);<br><br>첫번째 인자로 실행하고자 하는 xml query의 이름을 받게 됩니다.<br>이름은 모듈명.쿼리ID 로 이루어집니다.<br><br>$args는 null일수도 있고 해당 xml query에서 필요시 stdclass의 variables type으로 변수의 key, value를 설정후 인자로 넘기게 됩니다.<br><br>결과는 Object class의 객체로 return 됩니다.<br>쿼리 실패는 $output->toBool()이 false일 경우이고 true라면 쿼리는 정상적으로 실행이 된 것을 의미합니다.<br>select문의 결과 데이터는 $output->data 변수에 담겨져 return 됩니다.</p></div><div class="eArea xe_content xe_dr_hx"><h3 id="h1249628444840">XML sample</h3></div><div class="eArea xe_content xe_dr_txt"><ol class="code">
<li><query id="쿼리아이디" action="select|update|delete|insert"><br>
<tables><br>
<table name="원테이블이름" alias="alias" /><br>
...<br>
</tables><br>
<br>
<columns><br>
<column name="컬럼명" alias="alias" /><br>
...<br>
</columns><br>
<br>
<conditions><br>
<condition operation="조건걸" column="Column명" var="변수명" filter="필터형식" default="기본값" notnull="notnull" minlength="최소길이" maxlength="최대길이" pipe="연결연산자" /><br>
...<br>
<group pipe="연결연산자"><br>
<condition operation="조건걸" column="Column명" var="변수명" filter="필터형식" default="기본값" notnull="notnull" minlength="최소길이" maxlength="최대길이" pipe="연결연산자" /><br>
...<br>
</group><br>
...<br>
</conditions><br>
<br>
<navigation><br>
<index var="이름" default="기본값" order="desc|asc" /><br>
<list_count var="변수명" default="기본값" /><br>
<page_count var="변수명" default="기본값" /><br>
<page var="변수명" default="변수명" /><br>
</navigation><br>
<br>
<groups><br>
<group column="GroupBy 대상" /><br>
</groups><br>
</query></li>
</ol></div><div class="eArea xe_content xe_dr_txt"><ul>
<li>
<p><query> 의 attribute</p>
<ul>
<li>id : 쿼리를 찾을 수 있는 아이디입니다. module.query_id 로 query xml 파일을 찾고 사용하게 됩니다.<br>
action : select, update, delete, insert 4가지 종류가 있습니다.</li>
</ul>
<p> </p>
</li>
<li><tables>
<ul>
<li>테이블 조인시 여러개의 <table> 을 사용할 수 있습니다.<br>
name : 원테이블 명 (제로보드XE에서 prefix는 무시) alias : join또는 다른 용도로 원테이블명을 바꾸어 사용할 경우</li>
</ul>
</li>
<li><columns>
<ul>
<li>처리하고자 하는 컬럼명을 입력하시면 됩니다. name : 컬럼명 alias : 다른 이름으로 바꾸어 결과를 만들고자 할 경우 지정</li>
</ul>
</li>
<li><conditions>
<ul>
<li>조건절을 구성합니다.</li>
<li>조건절을 여러개의 그룹으로 사용하고자 할 때에는 <group> 태그를 이용해서 묶어 주실 수 있습니다.</li>
</ul>
</li>
<li><group> ... </group>
<ul>
<li>조건절을 그룹으로 사용할 경우 pipe="and|or" 를 이용하여 그룹끼리의 조건을 지정할 수 있습니다.</li>
</ul>
</li>
<li><condition>
<ul>
<li>
<p>operation : 아래와 같은 연산자로 처리가 됩니다.</p>
<div class="section" style="background-color: rgb(249, 249, 216);">equal : column = (var|default)<br>
more : column >= (var|default)<br>
excess : column > (var|default)<br>
less : column <= (var|default)<br>
below : column < (var|default)<br>
notequal : column != (var|default)<br>
notnull : column is not null<br>
null : column is null<br>
like_prefix : column like '%var|default'<br>
like_tail : column like 'var|default%'<br>
like : column like '%var|default%'<br>
in : column in (var|default)</div>
<p> </p>
</li>
<li>column : 컬럼명을 지정할 수 있습니다.</li>
<li>var : executeQuery()함수에서 2번째 인자의 key값을 지정할 수 있습니다.</li>
<li>
<p>filter : var 값의 조건을 filtering합니다. 아래와 같은 filter를 지원합니다.</p>
<div class="section" style="background-color: rgb(249, 249, 216);">email, email_address : 메일 형식<br>
homepage : http|https://등의 홈페이지 형식<br>
userid, user_id : 제로보드XE의 사용자 아이디 형식 (첫글자는 영문, 2번째부터는 숫자+영문+_)<br>
number : 숫자만 허용<br>
alpha : 영문자만 허용<br>
alpha_number : 숫자+영문자만 허용</div>
</li>
<li>
<p>default : var값이 null일 경우 default값으로 대체됩니다. 아래와 같은 함수값을 가질 수도 있습니다.</p>
<div class="section" style="background-color: rgb(249, 249, 216);">ipaddress() : 접속자의 ip 주소<br>
unixtime() : unix time (php의 time()함수)<br>
curdate() : YYYYMMDDHHIISS<br>
plus(int count) : column = column + count<br>
minus(int count) : column = column - count</div>
</li>
<li>notnull : not null check를 하게 됩니다. minlength : 최소길이 체크 maxlength : 최대길이 체크 pipe : and|or등의 조건을 지정할 수 있습니다.</li>
</ul>
</li>
<li>
<p><navigation> : navigation은 정렬순서(order by) 또는 페이징을 지원합니다.</p>
<ul>
<li>
<p><index> 정렬할 컬럼과 정렬방법을 지정할 수 있습니다.</p>
<div class="section" style="background-color: rgb(249, 249, 216);">var : 대상 컬럼명을 담은 변수명<br>
default : var값이 없을 경우 기본으로 정렬할 컬럼명 지정<br>
order : asc|desc</div>
</li>
<li>
<p><list_count> 페이징을 한 결과를 받을 수 있습니다.</p>
<div class="section" style="background-color: rgb(249, 249, 216);">var : 목록의 rows를 지정<br>
default : var값이 없을 경우 기본 rows 값</div>
</li>
<li>
<p><page_count> 페이징 계산시에 하단 페이지 네비게이션의 수를 지정</p>
<div class="section" style="background-color: rgb(249, 249, 216);">var : 페이징 네비게이션의 수<br>
default : var값이 없을 경우 기본 페이징 네비게이션의 수</div>
</li>
<li>
<p><page> 현재 몇번째 페이지인지를 지정할 수 있습니다.</p>
<div class="section" style="background-color: rgb(249, 249, 216);">var : 현재 몇번째 페이지인지를 지정할 변수<br>
default : var값이 지정되지 않았을 경우 페이지 번호</div>
</li>
</ul>
<p> </p>
</li>
<li><groups> : group by 절을 사용할 수 있습니다.</li>
</ul></div><div class="eArea xe_content xe_dr_hx"><h3 id="Selectquery예제">Select query 예제</h3></div><div class="eArea xe_content xe_dr_txt"><ul>
<li>
<p>member.getMemberList : member테이블에서 특정 조건을 가진 회원들을 페이징을 하면서 select</p>
<ol class="code">
<li><query id="getMemberList" action="select"><br>
<tables><br>
<table name="member" /><br>
</tables></li>
<li><br>
<columns><br>
<column name="*" /><br>
</columns></li>
<li><br>
<conditions><br>
<condition operation="equal" column="is_admin" var="is_admin" /><br>
<condition operation="equal" column="denied" var="is_denied" pipe="and" /><br>
<group pipe="and"><br>
<condition operation="like" column="user_id" var="s_user_id" /><br>
<condition operation="like" column="user_name" var="s_user_name" pipe="or" /><br>
<condition operation="like" column="nick_name" var="s_nick_name" pipe="or" /><br>
<condition operation="like" column="email_address" var="s_email_address" pipe="or" /><br>
<condition operation="like_prefix" column="regdate" var="s_regdate" pipe="or" /><br>
<condition operation="like_prefix" column="last_login" var="s_last_login" pipe="or" /><br>
</group><br>
</conditions><br>
<br>
<navigation><br>
<index var="sort_index" default="member_srl" order="desc" /><br>
<list_count var="list_count" default="20" /><br>
<page_count var="page_count" default="10" /><br>
<page var="page" default="1" /><br>
</navigation><br>
</query></li>
</ol>
</li>
<li>document.getMonthlyArchivedList : 모듈을 '년월'일을 기준으로 group by 한 결과를 가져옴</li>
</ul></div><div class="eArea xe_content xe_dr_txt"><ol class="code" style="margin-left: 2em;">
<li><query id="getMonthlyArchivedList" action="select"><br>
<tables><br>
<table name="documents" /><br>
</tables><br>
<br>
<columns><br>
<column name="substr(regdate,1,6)" alias="month"/><br>
<column name="count(*)" alias="count" /><br>
</columns><br>
<br>
<conditions><br>
<condition operation="in" column="module_srl" var="module_srl" filter="number" /><br>
</conditions><br>
<br>
<groups><br>
<group column="substr(regdate,1,6)" /><br>
</groups><br>
</query></li>
</ol></div><div class="eArea xe_content xe_dr_hx"><h3 id="h1249627751923">Join Select 예제</h3></div><div class="eArea xe_content xe_dr_txt"><p>document.getTrashList 예제입니다.</p></div><div class="eArea xe_content xe_dr_txt"><p></p><div><query id="getTrashList" action="select"></div><div> <tables></div><div> <table name="documents" /></div><div> <table name="document_trash" /></div><div> </tables></div><div> <columns></div><div> <column name="documents.*" /></div><div> <column name="document_trash.trash_srl" alias="trash_srl" /></div><div> <column name="document_trash.module_srl" alias="module_srl" /></div><div> <column name="document_trash.trash_date" alias="trash_date" /></div><div> <column name="document_trash.description" alias="trash_description" /></div><div> <column name="document_trash.ipaddress" alias="trash_ipaddress" /></div><div> <column name="document_trash.user_id" alias="trash_user_id" /></div><div> <column name="document_trash.user_name" alias="trash_user_name" /></div><div> <column name="document_trash.nick_name" alias="trash_nick_name" /></div><div> <column name="document_trash.member_srl" alias="trash_member_srl" /></div><div> </columns></div><div> <conditions></div><div> <condition operation="equal" column="document_trash.document_srl" default="documents.document_srl" notnull="notnull" /></div><div> <condition operation="in" column="document_trash.module_srl" var="module_srl" filter="number" pipe="and" /></div><div> <condition operation="equal" column="document_trash.member_srl" var="member_srl" filter="number" pipe="and" /></div><div><br></div><div> <group pipe="and"></div><div> <condition operation="like" column="documents.title" var="s_title" /></div><div> <condition operation="like" column="documents.content" var="s_content" pipe="or" /></div><div> <condition operation="like" column="documents.user_name" var="s_user_name" pipe="or" /></div><div> <condition operation="like" column="documents.user_id" var="s_user_id" pipe="or" /></div><div> <condition operation="like" column="documents.nick_name" var="s_nick_name" pipe="or" /></div><div> <condition operation="like" column="documents.email_address" var="s_email_addres" pipe="or" /></div><div> <condition operation="like" column="documents.homepage" var="s_homepage" pipe="or" /></div><div> <condition operation="like" column="documents.tags" var="s_tags" pipe="or" /></div><div> <condition operation="equal" column="documents.is_secret" var="s_is_secret" pipe="or" /></div><div> <condition operation="equal" column="documents.member_srl" var="s_member_srl" pipe="or" /></div><div> <condition operation="more" column="documents.readed_count" var="s_readed_count" pipe="or" /></div><div> <condition operation="more" column="documents.voted_count" var="s_voted_count" pipe="or" /></div><div> <condition operation="more" column="documents.comment_count" var="s_comment_count" pipe="or" /></div><div> <condition operation="more" column="documents.trackback_count" var="s_trackback_count" pipe="or" /></div><div> <condition operation="more" column="documents.uploaded_count" var="s_uploaded_count" pipe="or" /></div><div> <condition operation="like_prefix" column="documents.regdate" var="s_regdate" pipe="or" /></div><div> <condition operation="like_prefix" column="documents.last_update" var="s_last_update" pipe="or" /></div><div> <condition operation="like_prefix" column="documents.ipaddress" var="s_ipaddress" pipe="or" /></div><div> </group></div><div><br></div><div><br></div><div> </conditions></div><div> <navigation></div><div> <index var="sort_index" default="documents.list_order" order="order_type" /></div><div> <list_count var="list_count" default="20" /></div><div> <page_count var="page_count" default="10" /></div><div> <page var="page" default="1" /></div><div> </navigation></div><div></query></div><p></p></div><div class="eArea xe_content xe_dr_hx"><h3 id="h1249627778964">Letf Join Select 예제</h3></div><div class="eArea xe_content xe_dr_txt"><p></p><div><query id="getDocumentsExtraVars" action="select"></div><div> <tables></div><div> <table name="document_extra_keys" alias="extra_keys" /></div><div> <table name="document_extra_vars" alias="extra_vars" type="left join"></div><div> <conditions></div><div> <condition operation="equal" column="extra_keys.module_srl" default="extra_vars.module_srl" /></div><div> <condition operation="in" column="extra_vars.document_srl" var="document_srl" pipe="and" /></div><div> <condition operation="equal" column="extra_keys.eid" default="extra_vars.eid" pipe="and" /></div><div> </conditions></div><div> </table></div><div> </tables></div><div> <columns></div><div> <column name="extra_keys.module_srl" alias="module_srl" /></div><div> <column name="extra_keys.var_name" alias="name" /></div><div> <column name="extra_keys.var_type" alias="type" /></div><div> <column name="extra_keys.var_is_required" alias="is_required" /></div><div> <column name="extra_keys.var_search" alias="search" /></div><div> <column name="extra_keys.var_default" alias="default" /></div><div> <column name="extra_keys.var_desc" alias="desc" /></div><div> <column name="extra_keys.var_idx" alias="idx" /></div><div> <column name="extra_vars.document_srl" alias="document_srl" /></div><div> <column name="extra_vars.lang_code" alias="lang_code" /></div><div> <column name="extra_vars.value" alias="value" /></div><div> <column name="extra_keys.eid" alias="eid" /></div><div> </columns></div><div> <navigation></div><div> <index var="sort_index" default="extra_keys.var_idx" order="asc" /></div><div> </navigation></div><div></query></div><div><br></div><p></p></div><div class="eArea xe_content xe_dr_hx"><h3 id="1249368742400-5">Insert 예제</h3></div><div class="eArea xe_content xe_dr_txt"><ul>
<li>
<p>document.insertCategory : 문서 카테고리 추가</p>
<ol class="code">
<li><query id="insertCategory" action="insert"><br>
<tables><br>
<table name="document_categories" /><br>
</tables><br>
<br>
<columns><br>
<column name="category_srl" var="category_srl" filter="number" notnull="notnull" /><br>
<column name="module_srl" var="module_srl" filter="number" default="0" notnull="notnull" /><br>
<column name="title" var="title" notnull="notnull" minlength="2" maxlength="250" /><br>
<column name="document_count" var="document_count" default="0" /><br>
<column name="regdate" var="regdate" default="curdate()" /><br>
<column name="last_update" var="last_update" default="curdate()" /><br>
<column name="list_order" var="list_order" default="0" /><br>
</columns><br>
</query></li>
</ol>
</li>
</ul></div><div class="eArea xe_content xe_dr_hx"><h3 id="1249368742400-6">update 예제</h3></div><div class="eArea xe_content xe_dr_txt"><ul>
<li>
<p>document.updateCategory : 특정 카테고리의 제목이나 순서, 최근 수정일을 변경</p>
<ol class="code">
<li><query id="updateCategory" action="update"><br>
<tables><br>
<table name="document_categories" /><br>
</tables><br>
<br>
<columns><br>
<column name="title" var="title" /><br>
<column name="list_order" var="list_order" /><br>
<column name="last_update" var="last_update" default="curdate()" /><br>
</columns><br>
<br>
<conditions><br>
<condition operation="equal" column="category_srl" var="category_srl" filter="number" notnull="notnull" /><br>
</conditions><br>
</query></li>
</ol>
</li>
</ul></div><div class="eArea xe_content xe_dr_hx"><h3 id="1249368742400-7">delete 예제</h3></div><div class="eArea xe_content xe_dr_txt"><ul>
<li>
<p>document.deleteCategory : 특정 카테고리를 삭제</p>
<ol class="code">
<li><query id="deleteCategory" action="delete"><br>
<tables><br>
<table name="document_categories" /><br>
</tables><br>
<br>
<conditions><br>
<condition operation="equal" column="category_srl" var="category_srl" filter="number" notnull="notnull" /><br>
</conditions><br>
</query></li>
</ol>
</li>
</ul></div><div class="eArea xe_content xe_dr_hx"><h3 id="1249368742400-7">Select Click Count 예제</h3></div><div class="eArea xe_content xe_dr_txt"><p>Select 시 조회수 등의 정수의 숫자 컬럼을 +1 하는 기능입니다.</p><p>Cubrid의 경우에는 incr()이라는 함수를 사용하고 다른 데이타베이스의 경우 해당 컬럼을 Select후 Update 합니다.</p><p>XE Core 1.2.6 이상 버전에서 지원하고 있습니다.</p><p></p><p>document.getDocument XML Query에 Click Count 를 적용해 본 예제입니다.</p><p>select시 정수 숫자 컬럼 node에 attribute는 click_count, 값은 Argument로 매핑되는 변수명을 기입합니다.</p><p></p></div><div class="eArea xe_content xe_dr_txt"><p><query id="getDocument" action="select"><br> <tables><br> <table name="documents" /><br> </tables></p><p> <columns><br> <column name="document_srl" /><br> <column name="module_srl" /><br> <column name="category_srl" /><br> <column name="lang_code" /><br> <column name="is_notice" /><br> <column name="is_secret" /><br> <column name="title" /><br> <column name="title_bold" /><br> <column name="title_color" /><br> <column name="content" /><br> <column name="readed_count" <b><span style="color: rgb(255, 0, 0); ">click_count="incr_readed_count"</span></b>/><br> <column name="voted_count" /><br> <column name="blamed_count" /><br> <column name="comment_count" /><br> <column name="trackback_count" /><br> <column name="uploaded_count" /><br> <column name="password" /><br> <column name="user_id" /><br> <column name="user_name" /><br> <column name="nick_name" /><br> <column name="member_srl" /><br> <column name="email_address" /><br> <column name="homepage" /><br> <column name="tags" /><br> <column name="extra_vars" /><br> <column name="regdate" /><br> <column name="last_update" /><br> <column name="last_updater" /><br> <column name="ipaddress" /><br> <column name="list_order" /><br> <column name="update_order" /><br> <column name="allow_comment" /><br> <column name="lock_comment" /><br> <column name="allow_trackback" /><br> <column name="notify_message" /><br> </columns><br> <conditions><br> <condition operation="equal" column="document_srl" var="document_srl" filter="number" notnull="notnull" /><br> </conditions><br></query></p><p></p></div><div class="eArea xe_content xe_dr_txt"><p>click_count 의 매핑변수 값이 true이면 해당 컬럼을 +1 증가합니다.</p></div><div class="eArea xe_content xe_dr_txt"><p></p><div>$args->document_srl = $this->document_srl;</div><div>$args-><span style="color: rgb(255, 0, 0); ">incr_readed_count</span> =<span style="color: rgb(255, 0, 0); "> true</span>;</div><div>$output = executeQuery('document.getDocument', $args);</div><div><br></div><p></p></div>
|
sol |
2009.10.14 13:56:20 |
|
|
|
복원
<div class="eArea xe_content xe_dr_txt"><p><a href="http://doc.zeroboard.com/classXmlQueryParser.html" class="external" title="http://doc.zeroboard.com/classXmlQueryParser.html">http://doc.zeroboard.com/classXmlQueryParser.html</a> (클래스 구조)</p></div><div class="eArea xe_content xe_dr_index"><ul class="toc"><li class="toc3"><a href="#1249368742400-1">개요</a></li><li class="toc3"><a href="#1249368742400-2">사용법</a></li><li class="toc3"><a href="#h1249628444840">XML sample</a></li><li class="toc3"><a href="#Selectquery%EC%98%88%EC%A0%9C">Select query 예제</a></li><li class="toc3"><a href="#h1249627751923">Join Select 예제</a></li><li class="toc3"><a href="#h1249627778964">Letf Join Select 예제</a></li><li class="toc3"><a href="#1249368742400-5">Insert 예제</a></li><li class="toc3"><a href="#1249368742400-6">update 예제</a></li><li class="toc3"><a href="#1249368742400-7">delete 예제</a></li></ul></div><div class="eArea xe_content xe_dr_hx"><h3 id="1249368742400-1">개요</h3></div><div class="eArea xe_content xe_dr_txt"><ol>
<li>XpressEngine는 query문을 직접 사용하지 않습니다.</li>
<li>이는 다양한 DBMS를 지원하기 위해서입니다.</li>
<li>XML Query문의 확장자는 .xml 입니다.</li>
</ol></div><div class="eArea xe_content xe_dr_hx"><h3 id="1249368742400-2">사용법</h3></div><div class="eArea xe_content xe_dr_txt"><p>모듈 또는 애드온, 플러그인등에서 아래와 같이 사용할 수 있습니다.<br><br> 1. $args->name = "zero";<br> 2. $output = executeQuery("member.getMemberInfo", $args);<br><br>XML Query를 호출하여 실제 DB의 데이터를 받거나 조작하기 위해서 사용되는 executeQuery() 함수는 DB::executeQuery()의 alias입니다.<br><br> 1. function executeQuery($xml_query_name, $args = null);<br><br>첫번째 인자로 실행하고자 하는 xml query의 이름을 받게 됩니다.<br>이름은 모듈명.쿼리ID 로 이루어집니다.<br><br>$args는 null일수도 있고 해당 xml query에서 필요시 stdclass의 variables type으로 변수의 key, value를 설정후 인자로 넘기게 됩니다.<br><br>결과는 Object class의 객체로 return 됩니다.<br>쿼리 실패는 $output->toBool()이 false일 경우이고 true라면 쿼리는 정상적으로 실행이 된 것을 의미합니다.<br>select문의 결과 데이터는 $output->data 변수에 담겨져 return 됩니다.</p></div><div class="eArea xe_content xe_dr_hx"><h3 id="h1249628444840">XML sample</h3></div><div class="eArea xe_content xe_dr_txt"><ol class="code">
<li><query id="쿼리아이디" action="select|update|delete|insert"><br>
<tables><br>
<table name="원테이블이름" alias="alias" /><br>
...<br>
</tables><br>
<br>
<columns><br>
<column name="컬럼명" alias="alias" /><br>
...<br>
</columns><br>
<br>
<conditions><br>
<condition operation="조건걸" column="Column명" var="변수명" filter="필터형식" default="기본값" notnull="notnull" minlength="최소길이" maxlength="최대길이" pipe="연결연산자" /><br>
...<br>
<group pipe="연결연산자"><br>
<condition operation="조건걸" column="Column명" var="변수명" filter="필터형식" default="기본값" notnull="notnull" minlength="최소길이" maxlength="최대길이" pipe="연결연산자" /><br>
...<br>
</group><br>
...<br>
</conditions><br>
<br>
<navigation><br>
<index var="이름" default="기본값" order="desc|asc" /><br>
<list_count var="변수명" default="기본값" /><br>
<page_count var="변수명" default="기본값" /><br>
<page var="변수명" default="변수명" /><br>
</navigation><br>
<br>
<groups><br>
<group column="GroupBy 대상" /><br>
</groups><br>
</query></li>
</ol></div><div class="eArea xe_content xe_dr_txt"><ul>
<li>
<p><query> 의 attribute</p>
<ul>
<li>id : 쿼리를 찾을 수 있는 아이디입니다. module.query_id 로 query xml 파일을 찾고 사용하게 됩니다.<br>
action : select, update, delete, insert 4가지 종류가 있습니다.</li>
</ul>
<p> </p>
</li>
<li><tables>
<ul>
<li>테이블 조인시 여러개의 <table> 을 사용할 수 있습니다.<br>
name : 원테이블 명 (제로보드XE에서 prefix는 무시) alias : join또는 다른 용도로 원테이블명을 바꾸어 사용할 경우</li>
</ul>
</li>
<li><columns>
<ul>
<li>처리하고자 하는 컬럼명을 입력하시면 됩니다. name : 컬럼명 alias : 다른 이름으로 바꾸어 결과를 만들고자 할 경우 지정</li>
</ul>
</li>
<li><conditions>
<ul>
<li>조건절을 구성합니다.</li>
<li>조건절을 여러개의 그룹으로 사용하고자 할 때에는 <group> 태그를 이용해서 묶어 주실 수 있습니다.</li>
</ul>
</li>
<li><group> ... </group>
<ul>
<li>조건절을 그룹으로 사용할 경우 pipe="and|or" 를 이용하여 그룹끼리의 조건을 지정할 수 있습니다.</li>
</ul>
</li>
<li><condition>
<ul>
<li>
<p>operation : 아래와 같은 연산자로 처리가 됩니다.</p>
<div class="section" style="background-color: rgb(249, 249, 216);">equal : column = (var|default)<br>
more : column >= (var|default)<br>
excess : column > (var|default)<br>
less : column <= (var|default)<br>
below : column < (var|default)<br>
notequal : column != (var|default)<br>
notnull : column is not null<br>
null : column is null<br>
like_prefix : column like '%var|default'<br>
like_tail : column like 'var|default%'<br>
like : column like '%var|default%'<br>
in : column in (var|default)</div>
<p> </p>
</li>
<li>column : 컬럼명을 지정할 수 있습니다.</li>
<li>var : executeQuery()함수에서 2번째 인자의 key값을 지정할 수 있습니다.</li>
<li>
<p>filter : var 값의 조건을 filtering합니다. 아래와 같은 filter를 지원합니다.</p>
<div class="section" style="background-color: rgb(249, 249, 216);">email, email_address : 메일 형식<br>
homepage : http|https://등의 홈페이지 형식<br>
userid, user_id : 제로보드XE의 사용자 아이디 형식 (첫글자는 영문, 2번째부터는 숫자+영문+_)<br>
number : 숫자만 허용<br>
alpha : 영문자만 허용<br>
alpha_number : 숫자+영문자만 허용</div>
</li>
<li>
<p>default : var값이 null일 경우 default값으로 대체됩니다. 아래와 같은 함수값을 가질 수도 있습니다.</p>
<div class="section" style="background-color: rgb(249, 249, 216);">ipaddress() : 접속자의 ip 주소<br>
unixtime() : unix time (php의 time()함수)<br>
curdate() : YYYYMMDDHHIISS<br>
plus(int count) : column = column + count<br>
minus(int count) : column = column - count</div>
</li>
<li>notnull : not null check를 하게 됩니다. minlength : 최소길이 체크 maxlength : 최대길이 체크 pipe : and|or등의 조건을 지정할 수 있습니다.</li>
</ul>
</li>
<li>
<p><navigation> : navigation은 정렬순서(order by) 또는 페이징을 지원합니다.</p>
<ul>
<li>
<p><index> 정렬할 컬럼과 정렬방법을 지정할 수 있습니다.</p>
<div class="section" style="background-color: rgb(249, 249, 216);">var : 대상 컬럼명을 담은 변수명<br>
default : var값이 없을 경우 기본으로 정렬할 컬럼명 지정<br>
order : asc|desc</div>
</li>
<li>
<p><list_count> 페이징을 한 결과를 받을 수 있습니다.</p>
<div class="section" style="background-color: rgb(249, 249, 216);">var : 목록의 rows를 지정<br>
default : var값이 없을 경우 기본 rows 값</div>
</li>
<li>
<p><page_count> 페이징 계산시에 하단 페이지 네비게이션의 수를 지정</p>
<div class="section" style="background-color: rgb(249, 249, 216);">var : 페이징 네비게이션의 수<br>
default : var값이 없을 경우 기본 페이징 네비게이션의 수</div>
</li>
<li>
<p><page> 현재 몇번째 페이지인지를 지정할 수 있습니다.</p>
<div class="section" style="background-color: rgb(249, 249, 216);">var : 현재 몇번째 페이지인지를 지정할 변수<br>
default : var값이 지정되지 않았을 경우 페이지 번호</div>
</li>
</ul>
<p> </p>
</li>
<li><groups> : group by 절을 사용할 수 있습니다.</li>
</ul></div><div class="eArea xe_content xe_dr_hx"><h3 id="Selectquery예제">Select query 예제</h3></div><div class="eArea xe_content xe_dr_txt"><ul>
<li>
<p>member.getMemberList : member테이블에서 특정 조건을 가진 회원들을 페이징을 하면서 select</p>
<ol class="code">
<li><query id="getMemberList" action="select"><br>
<tables><br>
<table name="member" /><br>
</tables></li>
<li><br>
<columns><br>
<column name="*" /><br>
</columns></li>
<li><br>
<conditions><br>
<condition operation="equal" column="is_admin" var="is_admin" /><br>
<condition operation="equal" column="denied" var="is_denied" pipe="and" /><br>
<group pipe="and"><br>
<condition operation="like" column="user_id" var="s_user_id" /><br>
<condition operation="like" column="user_name" var="s_user_name" pipe="or" /><br>
<condition operation="like" column="nick_name" var="s_nick_name" pipe="or" /><br>
<condition operation="like" column="email_address" var="s_email_address" pipe="or" /><br>
<condition operation="like_prefix" column="regdate" var="s_regdate" pipe="or" /><br>
<condition operation="like_prefix" column="last_login" var="s_last_login" pipe="or" /><br>
</group><br>
</conditions><br>
<br>
<navigation><br>
<index var="sort_index" default="member_srl" order="desc" /><br>
<list_count var="list_count" default="20" /><br>
<page_count var="page_count" default="10" /><br>
<page var="page" default="1" /><br>
</navigation><br>
</query></li>
</ol>
</li>
<li>document.getMonthlyArchivedList : 모듈을 '년월'일을 기준으로 group by 한 결과를 가져옴</li>
</ul></div><div class="eArea xe_content xe_dr_txt"><ol class="code" style="margin-left: 2em;">
<li><query id="getMonthlyArchivedList" action="select"><br>
<tables><br>
<table name="documents" /><br>
</tables><br>
<br>
<columns><br>
<column name="substr(regdate,1,6)" alias="month"/><br>
<column name="count(*)" alias="count" /><br>
</columns><br>
<br>
<conditions><br>
<condition operation="in" column="module_srl" var="module_srl" filter="number" /><br>
</conditions><br>
<br>
<groups><br>
<group column="substr(regdate,1,6)" /><br>
</groups><br>
</query></li>
</ol></div><div class="eArea xe_content xe_dr_hx"><h3 id="h1249627751923">Join Select 예제</h3></div><div class="eArea xe_content xe_dr_txt"><p>document.getTrashList 예제입니다.</p></div><div class="eArea xe_content xe_dr_txt"><p></p><div><query id="getTrashList" action="select"></div><div> <tables></div><div> <table name="documents" /></div><div> <table name="document_trash" /></div><div> </tables></div><div> <columns></div><div> <column name="documents.*" /></div><div> <column name="document_trash.trash_srl" alias="trash_srl" /></div><div> <column name="document_trash.module_srl" alias="module_srl" /></div><div> <column name="document_trash.trash_date" alias="trash_date" /></div><div> <column name="document_trash.description" alias="trash_description" /></div><div> <column name="document_trash.ipaddress" alias="trash_ipaddress" /></div><div> <column name="document_trash.user_id" alias="trash_user_id" /></div><div> <column name="document_trash.user_name" alias="trash_user_name" /></div><div> <column name="document_trash.nick_name" alias="trash_nick_name" /></div><div> <column name="document_trash.member_srl" alias="trash_member_srl" /></div><div> </columns></div><div> <conditions></div><div> <condition operation="equal" column="document_trash.document_srl" default="documents.document_srl" notnull="notnull" /></div><div> <condition operation="in" column="document_trash.module_srl" var="module_srl" filter="number" pipe="and" /></div><div> <condition operation="equal" column="document_trash.member_srl" var="member_srl" filter="number" pipe="and" /></div><div><br></div><div> <group pipe="and"></div><div> <condition operation="like" column="documents.title" var="s_title" /></div><div> <condition operation="like" column="documents.content" var="s_content" pipe="or" /></div><div> <condition operation="like" column="documents.user_name" var="s_user_name" pipe="or" /></div><div> <condition operation="like" column="documents.user_id" var="s_user_id" pipe="or" /></div><div> <condition operation="like" column="documents.nick_name" var="s_nick_name" pipe="or" /></div><div> <condition operation="like" column="documents.email_address" var="s_email_addres" pipe="or" /></div><div> <condition operation="like" column="documents.homepage" var="s_homepage" pipe="or" /></div><div> <condition operation="like" column="documents.tags" var="s_tags" pipe="or" /></div><div> <condition operation="equal" column="documents.is_secret" var="s_is_secret" pipe="or" /></div><div> <condition operation="equal" column="documents.member_srl" var="s_member_srl" pipe="or" /></div><div> <condition operation="more" column="documents.readed_count" var="s_readed_count" pipe="or" /></div><div> <condition operation="more" column="documents.voted_count" var="s_voted_count" pipe="or" /></div><div> <condition operation="more" column="documents.comment_count" var="s_comment_count" pipe="or" /></div><div> <condition operation="more" column="documents.trackback_count" var="s_trackback_count" pipe="or" /></div><div> <condition operation="more" column="documents.uploaded_count" var="s_uploaded_count" pipe="or" /></div><div> <condition operation="like_prefix" column="documents.regdate" var="s_regdate" pipe="or" /></div><div> <condition operation="like_prefix" column="documents.last_update" var="s_last_update" pipe="or" /></div><div> <condition operation="like_prefix" column="documents.ipaddress" var="s_ipaddress" pipe="or" /></div><div> </group></div><div><br></div><div><br></div><div> </conditions></div><div> <navigation></div><div> <index var="sort_index" default="documents.list_order" order="order_type" /></div><div> <list_count var="list_count" default="20" /></div><div> <page_count var="page_count" default="10" /></div><div> <page var="page" default="1" /></div><div> </navigation></div><div></query></div><p></p></div><div class="eArea xe_content xe_dr_hx"><h3 id="h1249627778964">Letf Join Select 예제</h3></div><div class="eArea xe_content xe_dr_txt"><p></p><div><query id="getDocumentsExtraVars" action="select"></div><div> <tables></div><div> <table name="document_extra_keys" alias="extra_keys" /></div><div> <table name="document_extra_vars" alias="extra_vars" type="left join"></div><div> <conditions></div><div> <condition operation="equal" column="extra_keys.module_srl" default="extra_vars.module_srl" /></div><div> <condition operation="in" column="extra_vars.document_srl" var="document_srl" pipe="and" /></div><div> <condition operation="equal" column="extra_keys.eid" default="extra_vars.eid" pipe="and" /></div><div> </conditions></div><div> </table></div><div> </tables></div><div> <columns></div><div> <column name="extra_keys.module_srl" alias="module_srl" /></div><div> <column name="extra_keys.var_name" alias="name" /></div><div> <column name="extra_keys.var_type" alias="type" /></div><div> <column name="extra_keys.var_is_required" alias="is_required" /></div><div> <column name="extra_keys.var_search" alias="search" /></div><div> <column name="extra_keys.var_default" alias="default" /></div><div> <column name="extra_keys.var_desc" alias="desc" /></div><div> <column name="extra_keys.var_idx" alias="idx" /></div><div> <column name="extra_vars.document_srl" alias="document_srl" /></div><div> <column name="extra_vars.lang_code" alias="lang_code" /></div><div> <column name="extra_vars.value" alias="value" /></div><div> <column name="extra_keys.eid" alias="eid" /></div><div> </columns></div><div> <navigation></div><div> <index var="sort_index" default="extra_keys.var_idx" order="asc" /></div><div> </navigation></div><div></query></div><div><br></div><p></p></div><div class="eArea xe_content xe_dr_hx"><h3 id="1249368742400-5">Insert 예제</h3></div><div class="eArea xe_content xe_dr_txt"><ul>
<li>
<p>document.insertCategory : 문서 카테고리 추가</p>
<ol class="code">
<li><query id="insertCategory" action="insert"><br>
<tables><br>
<table name="document_categories" /><br>
</tables><br>
<br>
<columns><br>
<column name="category_srl" var="category_srl" filter="number" notnull="notnull" /><br>
<column name="module_srl" var="module_srl" filter="number" default="0" notnull="notnull" /><br>
<column name="title" var="title" notnull="notnull" minlength="2" maxlength="250" /><br>
<column name="document_count" var="document_count" default="0" /><br>
<column name="regdate" var="regdate" default="curdate()" /><br>
<column name="last_update" var="last_update" default="curdate()" /><br>
<column name="list_order" var="list_order" default="0" /><br>
</columns><br>
</query></li>
</ol>
</li>
</ul></div><div class="eArea xe_content xe_dr_hx"><h3 id="1249368742400-6">update 예제</h3></div><div class="eArea xe_content xe_dr_txt"><ul>
<li>
<p>document.updateCategory : 특정 카테고리의 제목이나 순서, 최근 수정일을 변경</p>
<ol class="code">
<li><query id="updateCategory" action="update"><br>
<tables><br>
<table name="document_categories" /><br>
</tables><br>
<br>
<columns><br>
<column name="title" var="title" /><br>
<column name="list_order" var="list_order" /><br>
<column name="last_update" var="last_update" default="curdate()" /><br>
</columns><br>
<br>
<conditions><br>
<condition operation="equal" column="category_srl" var="category_srl" filter="number" notnull="notnull" /><br>
</conditions><br>
</query></li>
</ol>
</li>
</ul></div><div class="eArea xe_content xe_dr_hx"><h3 id="1249368742400-7">delete 예제</h3></div><div class="eArea xe_content xe_dr_txt"><ul>
<li>
<p>document.deleteCategory : 특정 카테고리를 삭제</p>
<ol class="code">
<li><query id="deleteCategory" action="delete"><br>
<tables><br>
<table name="document_categories" /><br>
</tables><br>
<br>
<conditions><br>
<condition operation="equal" column="category_srl" var="category_srl" filter="number" notnull="notnull" /><br>
</conditions><br>
</query></li>
</ol>
</li>
</ul></div>
|
sol |
2009.08.24 16:49:43 |
|
|
|
복원
<div class="eArea xe_content xe_dr_txt"><p><a href="http://doc.zeroboard.com/classXmlQueryParser.html" class="external" title="http://doc.zeroboard.com/classXmlQueryParser.html">http://doc.zeroboard.com/classXmlQueryParser.html</a> (클래스 구조)</p></div><div class="eArea xe_content xe_dr_index"><ul class="toc"><li class="toc3"><a href="#1249368742400-1">개요</a></li><li class="toc3"><a href="#1249368742400-2">사용법</a></li><li class="toc3"><a href="#h1249628444840">XML sample</a></li><li class="toc3"><a href="#Selectquery예제">Select query 예제</a></li><li class="toc3"><a href="#h1249627751923">Join Select 예제</a></li><li class="toc3"><a href="#h1249627778964">Letf Join Select 예제</a></li><li class="toc3"><a href="#1249368742400-5">Insert 예제</a></li><li class="toc3"><a href="#1249368742400-6">update 예제</a></li><li class="toc3"><a href="#1249368742400-7">delete 예제</a></li></ul></div><div class="eArea xe_content xe_dr_hx"><h3 id="1249368742400-1">개요</h3></div><div class="eArea xe_content xe_dr_txt"><ol>
<li>XpressEngine는 query문을 직접 사용하지 않습니다.</li>
<li>이는 다양한 DBMS를 지원하기 위해서입니다.</li>
<li>XML Query문의 확장자는 .xml 입니다.</li>
</ol></div><div class="eArea xe_content xe_dr_hx"><h3 id="1249368742400-2">사용법</h3></div><div class="eArea xe_content xe_dr_txt"><p>모듈 또는 애드온, 플러그인등에서 아래와 같이 사용할 수 있습니다.</p></div><div class="eArea xe_content xe_dr_txt"><ol class="code" style="margin-left: 2em;">
<li>$args->name = "zero";</li>
<li>$output = executeQuery("member.getMemberInfo", $args);</li>
</ol></div><div class="eArea xe_content xe_dr_txt"><p>XML Query를 호출하여 실제 DB의 데이터를 받거나 조작하기 위해서 사용되는 <a href="http://doc.zeroboard.com/func_8inc_8php.html#a53bc375f79153665cca63971699aef4" class="ext-link">executeQuery()</a> 함수는 <a href="http://doc.zeroboard.com/classDB.html#f6ba2792ca4134604d82f17055a2ad5d" class="ext-link">DB::executeQuery()</a>의 alias입니다.</p></div><div class="eArea xe_content xe_dr_txt"><ol class="code" style="margin-left: 2em;">
<li>function executeQuery($xml_query_name, $args = null);</li>
</ol></div><div class="eArea xe_content xe_dr_txt"><p>첫번째 인자로 실행하고자 하는 xml query의 이름을 받게 됩니다.<br>
이름은 <strong>모듈명.쿼리ID</strong> 로 이루어집니다.</p></div><div class="eArea xe_content xe_dr_txt"><p>$args는 null일수도 있고 해당 xml query에서 필요시 stdclass의 variables type으로 변수의 key, value를 설정후 인자로 넘기게 됩니다.</p></div><div class="eArea xe_content xe_dr_txt"><p>결과는 Object class의 객체로 return 됩니다.</p></div><div class="eArea xe_content xe_dr_txt"><p>쿼리 실패는 $output->toBool()이 false일 경우이고 true라면 쿼리는 정상적으로 실행이 된 것을 의미합니다.</p></div><div class="eArea xe_content xe_dr_txt"><p>select문의 결과 데이터는 $output->data 변수에 담겨져 return 됩니다.</p></div><div class="eArea xe_content xe_dr_hx"><h3 id="h1249628444840">XML sample</h3></div><div class="eArea xe_content xe_dr_txt"><ol class="code">
<li><query id="쿼리아이디" action="select|update|delete|insert"><br>
<tables><br>
<table name="원테이블이름" alias="alias" /><br>
...<br>
</tables><br>
<br>
<columns><br>
<column name="컬럼명" alias="alias" /><br>
...<br>
</columns><br>
<br>
<conditions><br>
<condition operation="조건걸" column="Column명" var="변수명" filter="필터형식" default="기본값" notnull="notnull" minlength="최소길이" maxlength="최대길이" pipe="연결연산자" /><br>
...<br>
<group pipe="연결연산자"><br>
<condition operation="조건걸" column="Column명" var="변수명" filter="필터형식" default="기본값" notnull="notnull" minlength="최소길이" maxlength="최대길이" pipe="연결연산자" /><br>
...<br>
</group><br>
...<br>
</conditions><br>
<br>
<navigation><br>
<index var="이름" default="기본값" order="desc|asc" /><br>
<list_count var="변수명" default="기본값" /><br>
<page_count var="변수명" default="기본값" /><br>
<page var="변수명" default="변수명" /><br>
</navigation><br>
<br>
<groups><br>
<group column="GroupBy 대상" /><br>
</groups><br>
</query></li>
</ol></div><div class="eArea xe_content xe_dr_txt"><ul>
<li>
<p><query> 의 attribute</p>
<ul>
<li>id : 쿼리를 찾을 수 있는 아이디입니다. module.query_id 로 query xml 파일을 찾고 사용하게 됩니다.<br>
action : select, update, delete, insert 4가지 종류가 있습니다.</li>
</ul>
<p> </p>
</li>
<li><tables>
<ul>
<li>테이블 조인시 여러개의 <table> 을 사용할 수 있습니다.<br>
name : 원테이블 명 (제로보드XE에서 prefix는 무시) alias : join또는 다른 용도로 원테이블명을 바꾸어 사용할 경우</li>
</ul>
</li>
<li><columns>
<ul>
<li>처리하고자 하는 컬럼명을 입력하시면 됩니다. name : 컬럼명 alias : 다른 이름으로 바꾸어 결과를 만들고자 할 경우 지정</li>
</ul>
</li>
<li><conditions>
<ul>
<li>조건절을 구성합니다.</li>
<li>조건절을 여러개의 그룹으로 사용하고자 할 때에는 <group> 태그를 이용해서 묶어 주실 수 있습니다.</li>
</ul>
</li>
<li><group> ... </group>
<ul>
<li>조건절을 그룹으로 사용할 경우 pipe="and|or" 를 이용하여 그룹끼리의 조건을 지정할 수 있습니다.</li>
</ul>
</li>
<li><condition>
<ul>
<li>
<p>operation : 아래와 같은 연산자로 처리가 됩니다.</p>
<div class="section" style="background-color: rgb(249, 249, 216);">equal : column = (var|default)<br>
more : column >= (var|default)<br>
excess : column > (var|default)<br>
less : column <= (var|default)<br>
below : column < (var|default)<br>
notequal : column != (var|default)<br>
notnull : column is not null<br>
null : column is null<br>
like_prefix : column like '%var|default'<br>
like_tail : column like 'var|default%'<br>
like : column like '%var|default%'<br>
in : column in (var|default)</div>
<p> </p>
</li>
<li>column : 컬럼명을 지정할 수 있습니다.</li>
<li>var : executeQuery()함수에서 2번째 인자의 key값을 지정할 수 있습니다.</li>
<li>
<p>filter : var 값의 조건을 filtering합니다. 아래와 같은 filter를 지원합니다.</p>
<div class="section" style="background-color: rgb(249, 249, 216);">email, email_address : 메일 형식<br>
homepage : http|https://등의 홈페이지 형식<br>
userid, user_id : 제로보드XE의 사용자 아이디 형식 (첫글자는 영문, 2번째부터는 숫자+영문+_)<br>
number : 숫자만 허용<br>
alpha : 영문자만 허용<br>
alpha_number : 숫자+영문자만 허용</div>
</li>
<li>
<p>default : var값이 null일 경우 default값으로 대체됩니다. 아래와 같은 함수값을 가질 수도 있습니다.</p>
<div class="section" style="background-color: rgb(249, 249, 216);">ipaddress() : 접속자의 ip 주소<br>
unixtime() : unix time (php의 time()함수)<br>
curdate() : YYYYMMDDHHIISS<br>
plus(int count) : column = column + count<br>
minus(int count) : column = column - count</div>
</li>
<li>notnull : not null check를 하게 됩니다. minlength : 최소길이 체크 maxlength : 최대길이 체크 pipe : and|or등의 조건을 지정할 수 있습니다.</li>
</ul>
</li>
<li>
<p><navigation> : navigation은 정렬순서(order by) 또는 페이징을 지원합니다.</p>
<ul>
<li>
<p><index> 정렬할 컬럼과 정렬방법을 지정할 수 있습니다.</p>
<div class="section" style="background-color: rgb(249, 249, 216);">var : 대상 컬럼명을 담은 변수명<br>
default : var값이 없을 경우 기본으로 정렬할 컬럼명 지정<br>
order : asc|desc</div>
</li>
<li>
<p><list_count> 페이징을 한 결과를 받을 수 있습니다.</p>
<div class="section" style="background-color: rgb(249, 249, 216);">var : 목록의 rows를 지정<br>
default : var값이 없을 경우 기본 rows 값</div>
</li>
<li>
<p><page_count> 페이징 계산시에 하단 페이지 네비게이션의 수를 지정</p>
<div class="section" style="background-color: rgb(249, 249, 216);">var : 페이징 네비게이션의 수<br>
default : var값이 없을 경우 기본 페이징 네비게이션의 수</div>
</li>
<li>
<p><page> 현재 몇번째 페이지인지를 지정할 수 있습니다.</p>
<div class="section" style="background-color: rgb(249, 249, 216);">var : 현재 몇번째 페이지인지를 지정할 변수<br>
default : var값이 지정되지 않았을 경우 페이지 번호</div>
</li>
</ul>
<p> </p>
</li>
<li><groups> : group by 절을 사용할 수 있습니다.</li>
</ul></div><div class="eArea xe_content xe_dr_hx"><h3 id="Selectquery예제">Select query 예제</h3></div><div class="eArea xe_content xe_dr_txt"><ul>
<li>
<p>member.getMemberList : member테이블에서 특정 조건을 가진 회원들을 페이징을 하면서 select</p>
<ol class="code">
<li><query id="getMemberList" action="select"><br>
<tables><br>
<table name="member" /><br>
</tables></li>
<li><br>
<columns><br>
<column name="*" /><br>
</columns></li>
<li><br>
<conditions><br>
<condition operation="equal" column="is_admin" var="is_admin" /><br>
<condition operation="equal" column="denied" var="is_denied" pipe="and" /><br>
<group pipe="and"><br>
<condition operation="like" column="user_id" var="s_user_id" /><br>
<condition operation="like" column="user_name" var="s_user_name" pipe="or" /><br>
<condition operation="like" column="nick_name" var="s_nick_name" pipe="or" /><br>
<condition operation="like" column="email_address" var="s_email_address" pipe="or" /><br>
<condition operation="like_prefix" column="regdate" var="s_regdate" pipe="or" /><br>
<condition operation="like_prefix" column="last_login" var="s_last_login" pipe="or" /><br>
</group><br>
</conditions><br>
<br>
<navigation><br>
<index var="sort_index" default="member_srl" order="desc" /><br>
<list_count var="list_count" default="20" /><br>
<page_count var="page_count" default="10" /><br>
<page var="page" default="1" /><br>
</navigation><br>
</query></li>
</ol>
</li>
<li>document.getMonthlyArchivedList : 모듈을 '년월'일을 기준으로 group by 한 결과를 가져옴</li>
</ul></div><div class="eArea xe_content xe_dr_txt"><ol class="code" style="margin-left: 2em;">
<li><query id="getMonthlyArchivedList" action="select"><br>
<tables><br>
<table name="documents" /><br>
</tables><br>
<br>
<columns><br>
<column name="substr(regdate,1,6)" alias="month"/><br>
<column name="count(*)" alias="count" /><br>
</columns><br>
<br>
<conditions><br>
<condition operation="in" column="module_srl" var="module_srl" filter="number" /><br>
</conditions><br>
<br>
<groups><br>
<group column="substr(regdate,1,6)" /><br>
</groups><br>
</query></li>
</ol></div><div class="eArea xe_content xe_dr_hx"><h3 id="h1249627751923">Join Select 예제</h3></div><div class="eArea xe_content xe_dr_txt"><p>document.getTrashList 예제입니다.</p></div><div class="eArea xe_content xe_dr_txt"><p></p><div><query id="getTrashList" action="select"></div><div> <tables></div><div> <table name="documents" /></div><div> <table name="document_trash" /></div><div> </tables></div><div> <columns></div><div> <column name="documents.*" /></div><div> <column name="document_trash.trash_srl" alias="trash_srl" /></div><div> <column name="document_trash.module_srl" alias="module_srl" /></div><div> <column name="document_trash.trash_date" alias="trash_date" /></div><div> <column name="document_trash.description" alias="trash_description" /></div><div> <column name="document_trash.ipaddress" alias="trash_ipaddress" /></div><div> <column name="document_trash.user_id" alias="trash_user_id" /></div><div> <column name="document_trash.user_name" alias="trash_user_name" /></div><div> <column name="document_trash.nick_name" alias="trash_nick_name" /></div><div> <column name="document_trash.member_srl" alias="trash_member_srl" /></div><div> </columns></div><div> <conditions></div><div> <condition operation="equal" column="document_trash.document_srl" default="documents.document_srl" notnull="notnull" /></div><div> <condition operation="in" column="document_trash.module_srl" var="module_srl" filter="number" pipe="and" /></div><div> <condition operation="equal" column="document_trash.member_srl" var="member_srl" filter="number" pipe="and" /></div><div><br></div><div> <group pipe="and"></div><div> <condition operation="like" column="documents.title" var="s_title" /></div><div> <condition operation="like" column="documents.content" var="s_content" pipe="or" /></div><div> <condition operation="like" column="documents.user_name" var="s_user_name" pipe="or" /></div><div> <condition operation="like" column="documents.user_id" var="s_user_id" pipe="or" /></div><div> <condition operation="like" column="documents.nick_name" var="s_nick_name" pipe="or" /></div><div> <condition operation="like" column="documents.email_address" var="s_email_addres" pipe="or" /></div><div> <condition operation="like" column="documents.homepage" var="s_homepage" pipe="or" /></div><div> <condition operation="like" column="documents.tags" var="s_tags" pipe="or" /></div><div> <condition operation="equal" column="documents.is_secret" var="s_is_secret" pipe="or" /></div><div> <condition operation="equal" column="documents.member_srl" var="s_member_srl" pipe="or" /></div><div> <condition operation="more" column="documents.readed_count" var="s_readed_count" pipe="or" /></div><div> <condition operation="more" column="documents.voted_count" var="s_voted_count" pipe="or" /></div><div> <condition operation="more" column="documents.comment_count" var="s_comment_count" pipe="or" /></div><div> <condition operation="more" column="documents.trackback_count" var="s_trackback_count" pipe="or" /></div><div> <condition operation="more" column="documents.uploaded_count" var="s_uploaded_count" pipe="or" /></div><div> <condition operation="like_prefix" column="documents.regdate" var="s_regdate" pipe="or" /></div><div> <condition operation="like_prefix" column="documents.last_update" var="s_last_update" pipe="or" /></div><div> <condition operation="like_prefix" column="documents.ipaddress" var="s_ipaddress" pipe="or" /></div><div> </group></div><div><br></div><div><br></div><div> </conditions></div><div> <navigation></div><div> <index var="sort_index" default="documents.list_order" order="order_type" /></div><div> <list_count var="list_count" default="20" /></div><div> <page_count var="page_count" default="10" /></div><div> <page var="page" default="1" /></div><div> </navigation></div><div></query></div><p></p></div><div class="eArea xe_content xe_dr_hx"><h3 id="h1249627778964">Letf Join Select 예제</h3></div><div class="eArea xe_content xe_dr_txt"><p></p><div><query id="getDocumentsExtraVars" action="select"></div><div> <tables></div><div> <table name="document_extra_keys" alias="extra_keys" /></div><div> <table name="document_extra_vars" alias="extra_vars" type="left join"></div><div> <conditions></div><div> <condition operation="equal" column="extra_keys.module_srl" default="extra_vars.module_srl" /></div><div> <condition operation="in" column="extra_vars.document_srl" var="document_srl" pipe="and" /></div><div> <condition operation="equal" column="extra_keys.eid" default="extra_vars.eid" pipe="and" /></div><div> </conditions></div><div> </table></div><div> </tables></div><div> <columns></div><div> <column name="extra_keys.module_srl" alias="module_srl" /></div><div> <column name="extra_keys.var_name" alias="name" /></div><div> <column name="extra_keys.var_type" alias="type" /></div><div> <column name="extra_keys.var_is_required" alias="is_required" /></div><div> <column name="extra_keys.var_search" alias="search" /></div><div> <column name="extra_keys.var_default" alias="default" /></div><div> <column name="extra_keys.var_desc" alias="desc" /></div><div> <column name="extra_keys.var_idx" alias="idx" /></div><div> <column name="extra_vars.document_srl" alias="document_srl" /></div><div> <column name="extra_vars.lang_code" alias="lang_code" /></div><div> <column name="extra_vars.value" alias="value" /></div><div> <column name="extra_keys.eid" alias="eid" /></div><div> </columns></div><div> <navigation></div><div> <index var="sort_index" default="extra_keys.var_idx" order="asc" /></div><div> </navigation></div><div></query></div><div><br></div><p></p></div><div class="eArea xe_content xe_dr_hx"><h3 id="1249368742400-5">Insert 예제</h3></div><div class="eArea xe_content xe_dr_txt"><ul>
<li>
<p>document.insertCategory : 문서 카테고리 추가</p>
<ol class="code">
<li><query id="insertCategory" action="insert"><br>
<tables><br>
<table name="document_categories" /><br>
</tables><br>
<br>
<columns><br>
<column name="category_srl" var="category_srl" filter="number" notnull="notnull" /><br>
<column name="module_srl" var="module_srl" filter="number" default="0" notnull="notnull" /><br>
<column name="title" var="title" notnull="notnull" minlength="2" maxlength="250" /><br>
<column name="document_count" var="document_count" default="0" /><br>
<column name="regdate" var="regdate" default="curdate()" /><br>
<column name="last_update" var="last_update" default="curdate()" /><br>
<column name="list_order" var="list_order" default="0" /><br>
</columns><br>
</query></li>
</ol>
</li>
</ul></div><div class="eArea xe_content xe_dr_hx"><h3 id="1249368742400-6">update 예제</h3></div><div class="eArea xe_content xe_dr_txt"><ul>
<li>
<p>document.updateCategory : 특정 카테고리의 제목이나 순서, 최근 수정일을 변경</p>
<ol class="code">
<li><query id="updateCategory" action="update"><br>
<tables><br>
<table name="document_categories" /><br>
</tables><br>
<br>
<columns><br>
<column name="title" var="title" /><br>
<column name="list_order" var="list_order" /><br>
<column name="last_update" var="last_update" default="curdate()" /><br>
</columns><br>
<br>
<conditions><br>
<condition operation="equal" column="category_srl" var="category_srl" filter="number" notnull="notnull" /><br>
</conditions><br>
</query></li>
</ol>
</li>
</ul></div><div class="eArea xe_content xe_dr_hx"><h3 id="1249368742400-7">delete 예제</h3></div><div class="eArea xe_content xe_dr_txt"><ul>
<li>
<p>document.deleteCategory : 특정 카테고리를 삭제</p>
<ol class="code">
<li><query id="deleteCategory" action="delete"><br>
<tables><br>
<table name="document_categories" /><br>
</tables><br>
<br>
<conditions><br>
<condition operation="equal" column="category_srl" var="category_srl" filter="number" notnull="notnull" /><br>
</conditions><br>
</query></li>
</ol>
</li>
</ul></div>
|
sol |
2009.08.07 16:02:13 |
|
|
|
복원
<div class="eArea xe_content xe_dr_hx"><h3 id="1249368742400-0"> Xml Query Parser</h3></div><div class="eArea xe_content xe_dr_txt"><p><a href="http://doc.zeroboard.com/classXmlQueryParser.html" class="external" title="http://doc.zeroboard.com/classXmlQueryParser.html">http://doc.zeroboard.com/classXmlQueryParser.html</a> (클래스 구조)</p></div><div class="eArea xe_content xe_dr_hx"><h3 id="1249368742400-1">개요</h3></div><div class="eArea xe_content xe_dr_txt"><ol>
<li>XpressEngine는 query문을 직접 사용하지 않습니다.</li>
<li>이는 다양한 DBMS를 지원하기 위해서입니다.</li>
<li>XML Query문의 확장자는 .xml 입니다.</li>
</ol></div><div class="eArea xe_content xe_dr_hx"><h3 id="1249368742400-2">사용법</h3></div><div class="eArea xe_content xe_dr_txt"><p>모듈 또는 애드온, 플러그인등에서 아래와 같이 사용할 수 있습니다.</p></div><div class="eArea xe_content xe_dr_txt"><ol class="code" style="margin-left: 2em;">
<li>$args->name = "zero";</li>
<li>$output = executeQuery("member.getMemberInfo", $args);</li>
</ol></div><div class="eArea xe_content xe_dr_txt"><p>XML Query를 호출하여 실제 DB의 데이터를 받거나 조작하기 위해서 사용되는 <a href="http://doc.zeroboard.com/func_8inc_8php.html#a53bc375f79153665cca63971699aef4" class="ext-link">executeQuery()</a> 함수는 <a href="http://doc.zeroboard.com/classDB.html#f6ba2792ca4134604d82f17055a2ad5d" class="ext-link">DB::executeQuery()</a>의 alias입니다.</p></div><div class="eArea xe_content xe_dr_txt"><ol class="code" style="margin-left: 2em;">
<li>function executeQuery($xml_query_name, $args = null);</li>
</ol></div><div class="eArea xe_content xe_dr_txt"><p>첫번째 인자로 실행하고자 하는 xml query의 이름을 받게 됩니다.<br>
이름은 <strong>모듈명.쿼리ID</strong> 로 이루어집니다.</p></div><div class="eArea xe_content xe_dr_txt"><p>$args는 null일수도 있고 해당 xml query에서 필요시 stdclass의 variables type으로 변수의 key, value를 설정후 인자로 넘기게 됩니다.</p></div><div class="eArea xe_content xe_dr_txt"><p>결과는 Object class의 객체로 return 됩니다.</p></div><div class="eArea xe_content xe_dr_txt"><p>쿼리 실패는 $output->toBool()이 false일 경우이고 true라면 쿼리는 정상적으로 실행이 된 것을 의미합니다.</p></div><div class="eArea xe_content xe_dr_txt"><p>select문의 결과 데이터는 $output->data 변수에 담겨져 return 됩니다.</p></div><div class="eArea xe_content xe_dr_hx"><h3 id="1249368742400-3">XML sample</h3></div><div class="eArea xe_content xe_dr_txt"><ol class="code">
<li><query id="쿼리아이디" action="select|update|delete|insert"><br>
<tables><br>
<table name="원테이블이름" alias="alias" /><br>
...<br>
</tables><br>
<br>
<columns><br>
<column name="컬럼명" alias="alias" /><br>
...<br>
</columns><br>
<br>
<conditions><br>
<condition operation="조건걸" column="Column명" var="변수명" filter="필터형식" default="기본값" notnull="notnull" minlength="최소길이" maxlength="최대길이" pipe="연결연산자" /><br>
...<br>
<group pipe="연결연산자"><br>
<condition operation="조건걸" column="Column명" var="변수명" filter="필터형식" default="기본값" notnull="notnull" minlength="최소길이" maxlength="최대길이" pipe="연결연산자" /><br>
...<br>
</group><br>
...<br>
</conditions><br>
<br>
<navigation><br>
<index var="이름" default="기본값" order="desc|asc" /><br>
<list_count var="변수명" default="기본값" /><br>
<page_count var="변수명" default="기본값" /><br>
<page var="변수명" default="변수명" /><br>
</navigation><br>
<br>
<groups><br>
<group column="GroupBy 대상" /><br>
</groups><br>
</query></li>
</ol></div><div class="eArea xe_content xe_dr_txt"><ul>
<li>
<p><query> 의 attribute</p>
<ul>
<li>id : 쿼리를 찾을 수 있는 아이디입니다. module.query_id 로 query xml 파일을 찾고 사용하게 됩니다.<br>
action : select, update, delete, insert 4가지 종류가 있습니다.</li>
</ul>
<p> </p>
</li>
<li><tables>
<ul>
<li>테이블 조인시 여러개의 <table> 을 사용할 수 있습니다.<br>
name : 원테이블 명 (제로보드XE에서 prefix는 무시) alias : join또는 다른 용도로 원테이블명을 바꾸어 사용할 경우</li>
</ul>
</li>
<li><columns>
<ul>
<li>처리하고자 하는 컬럼명을 입력하시면 됩니다. name : 컬럼명 alias : 다른 이름으로 바꾸어 결과를 만들고자 할 경우 지정</li>
</ul>
</li>
<li><conditions>
<ul>
<li>조건절을 구성합니다.</li>
<li>조건절을 여러개의 그룹으로 사용하고자 할 때에는 <group> 태그를 이용해서 묶어 주실 수 있습니다.</li>
</ul>
</li>
<li><group> ... </group>
<ul>
<li>조건절을 그룹으로 사용할 경우 pipe="and|or" 를 이용하여 그룹끼리의 조건을 지정할 수 있습니다.</li>
</ul>
</li>
<li><condition>
<ul>
<li>
<p>operation : 아래와 같은 연산자로 처리가 됩니다.</p>
<div class="section" style="background-color: rgb(249, 249, 216);">equal : column = (var|default)<br>
more : column >= (var|default)<br>
excess : column > (var|default)<br>
less : column <= (var|default)<br>
below : column < (var|default)<br>
notequal : column != (var|default)<br>
notnull : column is not null<br>
null : column is null<br>
like_prefix : column like '%var|default'<br>
like_tail : column like 'var|default%'<br>
like : column like '%var|default%'<br>
in : column in (var|default)</div>
<p> </p>
</li>
<li>column : 컬럼명을 지정할 수 있습니다.</li>
<li>var : executeQuery()함수에서 2번째 인자의 key값을 지정할 수 있습니다.</li>
<li>
<p>filter : var 값의 조건을 filtering합니다. 아래와 같은 filter를 지원합니다.</p>
<div class="section" style="background-color: rgb(249, 249, 216);">email, email_address : 메일 형식<br>
homepage : http|https://등의 홈페이지 형식<br>
userid, user_id : 제로보드XE의 사용자 아이디 형식 (첫글자는 영문, 2번째부터는 숫자+영문+_)<br>
number : 숫자만 허용<br>
alpha : 영문자만 허용<br>
alpha_number : 숫자+영문자만 허용</div>
</li>
<li>
<p>default : var값이 null일 경우 default값으로 대체됩니다. 아래와 같은 함수값을 가질 수도 있습니다.</p>
<div class="section" style="background-color: rgb(249, 249, 216);">ipaddress() : 접속자의 ip 주소<br>
unixtime() : unix time (php의 time()함수)<br>
curdate() : YYYYMMDDHHIISS<br>
plus(int count) : column = column + count<br>
minus(int count) : column = column - count</div>
</li>
<li>notnull : not null check를 하게 됩니다. minlength : 최소길이 체크 maxlength : 최대길이 체크 pipe : and|or등의 조건을 지정할 수 있습니다.</li>
</ul>
</li>
<li>
<p><navigation> : navigation은 정렬순서(order by) 또는 페이징을 지원합니다.</p>
<ul>
<li>
<p><index> 정렬할 컬럼과 정렬방법을 지정할 수 있습니다.</p>
<div class="section" style="background-color: rgb(249, 249, 216);">var : 대상 컬럼명을 담은 변수명<br>
default : var값이 없을 경우 기본으로 정렬할 컬럼명 지정<br>
order : asc|desc</div>
</li>
<li>
<p><list_count> 페이징을 한 결과를 받을 수 있습니다.</p>
<div class="section" style="background-color: rgb(249, 249, 216);">var : 목록의 rows를 지정<br>
default : var값이 없을 경우 기본 rows 값</div>
</li>
<li>
<p><page_count> 페이징 계산시에 하단 페이지 네비게이션의 수를 지정</p>
<div class="section" style="background-color: rgb(249, 249, 216);">var : 페이징 네비게이션의 수<br>
default : var값이 없을 경우 기본 페이징 네비게이션의 수</div>
</li>
<li>
<p><page> 현재 몇번째 페이지인지를 지정할 수 있습니다.</p>
<div class="section" style="background-color: rgb(249, 249, 216);">var : 현재 몇번째 페이지인지를 지정할 변수<br>
default : var값이 지정되지 않았을 경우 페이지 번호</div>
</li>
</ul>
<p> </p>
</li>
<li><groups> : group by 절을 사용할 수 있습니다.</li>
</ul></div><div class="eArea xe_content xe_dr_hx"><h3 id="Selectquery예제">Select query 예제</h3></div><div class="eArea xe_content xe_dr_txt"><ul>
<li>
<p>member.getMemberList : member테이블에서 특정 조건을 가진 회원들을 페이징을 하면서 select</p>
<ol class="code">
<li><query id="getMemberList" action="select"><br>
<tables><br>
<table name="member" /><br>
</tables></li>
<li><br>
<columns><br>
<column name="*" /><br>
</columns></li>
<li><br>
<conditions><br>
<condition operation="equal" column="is_admin" var="is_admin" /><br>
<condition operation="equal" column="denied" var="is_denied" pipe="and" /><br>
<group pipe="and"><br>
<condition operation="like" column="user_id" var="s_user_id" /><br>
<condition operation="like" column="user_name" var="s_user_name" pipe="or" /><br>
<condition operation="like" column="nick_name" var="s_nick_name" pipe="or" /><br>
<condition operation="like" column="email_address" var="s_email_address" pipe="or" /><br>
<condition operation="like_prefix" column="regdate" var="s_regdate" pipe="or" /><br>
<condition operation="like_prefix" column="last_login" var="s_last_login" pipe="or" /><br>
</group><br>
</conditions><br>
<br>
<navigation><br>
<index var="sort_index" default="member_srl" order="desc" /><br>
<list_count var="list_count" default="20" /><br>
<page_count var="page_count" default="10" /><br>
<page var="page" default="1" /><br>
</navigation><br>
</query></li>
</ol>
</li>
<li>document.getMonthlyArchivedList : 모듈을 '년월'일을 기준으로 group by 한 결과를 가져옴</li>
</ul></div><div class="eArea xe_content xe_dr_txt"><ol class="code" style="margin-left: 2em;">
<li><query id="getMonthlyArchivedList" action="select"><br>
<tables><br>
<table name="documents" /><br>
</tables><br>
<br>
<columns><br>
<column name="substr(regdate,1,6)" alias="month"/><br>
<column name="count(*)" alias="count" /><br>
</columns><br>
<br>
<conditions><br>
<condition operation="in" column="module_srl" var="module_srl" filter="number" /><br>
</conditions><br>
<br>
<groups><br>
<group column="substr(regdate,1,6)" /><br>
</groups><br>
</query></li>
</ol></div><div class="eArea xe_content xe_dr_hx"><h3 id="1249368742400-5">Insert 예제</h3></div><div class="eArea xe_content xe_dr_txt"><ul>
<li>
<p>document.insertCategory : 문서 카테고리 추가</p>
<ol class="code">
<li><query id="insertCategory" action="insert"><br>
<tables><br>
<table name="document_categories" /><br>
</tables><br>
<br>
<columns><br>
<column name="category_srl" var="category_srl" filter="number" notnull="notnull" /><br>
<column name="module_srl" var="module_srl" filter="number" default="0" notnull="notnull" /><br>
<column name="title" var="title" notnull="notnull" minlength="2" maxlength="250" /><br>
<column name="document_count" var="document_count" default="0" /><br>
<column name="regdate" var="regdate" default="curdate()" /><br>
<column name="last_update" var="last_update" default="curdate()" /><br>
<column name="list_order" var="list_order" default="0" /><br>
</columns><br>
</query></li>
</ol>
</li>
</ul></div><div class="eArea xe_content xe_dr_hx"><h3 id="1249368742400-6">update 예제</h3></div><div class="eArea xe_content xe_dr_txt"><ul>
<li>
<p>document.updateCategory : 특정 카테고리의 제목이나 순서, 최근 수정일을 변경</p>
<ol class="code">
<li><query id="updateCategory" action="update"><br>
<tables><br>
<table name="document_categories" /><br>
</tables><br>
<br>
<columns><br>
<column name="title" var="title" /><br>
<column name="list_order" var="list_order" /><br>
<column name="last_update" var="last_update" default="curdate()" /><br>
</columns><br>
<br>
<conditions><br>
<condition operation="equal" column="category_srl" var="category_srl" filter="number" notnull="notnull" /><br>
</conditions><br>
</query></li>
</ol>
</li>
</ul></div><div class="eArea xe_content xe_dr_hx"><h3 id="1249368742400-7">delete 예제</h3></div><div class="eArea xe_content xe_dr_txt"><ul>
<li>
<p>document.deleteCategory : 특정 카테고리를 삭제</p>
<ol class="code">
<li><query id="deleteCategory" action="delete"><br>
<tables><br>
<table name="document_categories" /><br>
</tables><br>
<br>
<conditions><br>
<condition operation="equal" column="category_srl" var="category_srl" filter="number" notnull="notnull" /><br>
</conditions><br>
</query></li>
</ol>
</li>
</ul></div>
|
sol |
2009.08.04 15:54:23 |