게시글 검색시 division을 적용하여 5000개 단위로 검색하고 계속 검색하도록 하여 속도 증가

git-svn-id: http://xe-core.googlecode.com/svn/sandbox@3155 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
zero 2007-12-05 03:04:31 +00:00
parent 539c32082e
commit 1d4191e9ba
17 changed files with 148 additions and 21 deletions

View file

@ -580,3 +580,6 @@ Jeong, Chan Myeong 070601~070630
.tags .tagTypeD a { font-weight:bold; margin:0; background-color:#EFEFEF;}
.tags .tagTypeE a { font-weight:normal; margin:0;}
.searchNextButton { border:1px solid #979797; border-left:1px solid #B1B1B1; border-top:1px solid #B1B1B1; color:#4F4F4F; height:21px; font-size:8pt; padding-left:5px; padding-right:5px; _padding-top:3px;}
*:first-child+html .searchNextButton { padding-top:3px; }

View file

@ -22,15 +22,15 @@
<!-- 페이지 네비게이션 -->
<div class="pageNavigation">
<a href="{getUrl('page','','document_srl','')}" class="goToFirst"><img src="./images/common/icon_gofirst.gif" alt="{$lang->first_page}" width="7" height="5" /></a>
<a href="{getUrl('page','','document_srl','','division',$division,'last_division',$last_division)}" class="goToFirst"><img src="./images/common/icon_gofirst.gif" alt="{$lang->first_page}" width="7" height="5" /></a>
<!--@while($page_no = $page_navigation->getNextPage())-->
<!--@if($page == $page_no)-->
<span class="current">{$page_no}</span>
<!--@else-->
<a href="{getUrl('page',$page_no,'document_srl','')}">{$page_no}</a>
<a href="{getUrl('page',$page_no,'document_srl','','division',$division,'last_division',$last_division)}">{$page_no}</a>
<!--@end-->
<!--@end-->
<a href="{getUrl('page',$page_navigation->last_page,'document_srl','')}" class="goToLast"><img src="./images/common/icon_golast.gif" alt="{$lang->last_page}" width="7" height="5" /></a>
<a href="{getUrl('page',$page_navigation->last_page,'document_srl','','division',$division,'last_division',$last_division)}" class="goToLast"><img src="./images/common/icon_golast.gif" alt="{$lang->last_page}" width="7" height="5" /></a>
</div>
@ -57,7 +57,13 @@
<!--@foreach($search_option as $key => $val)-->
<option value="{$key}" <!--@if($search_target==$key)-->selected="selected"<!--@end-->>{$val}</option>
<!--@end-->
</select><input type="text" name="search_keyword" value="{htmlspecialchars($search_keyword)}" class="inputTypeText"/><input type="image" src="./images/common/btn_search.gif" alt="{$lang->cmd_search}" /><input type="image" onclick="location.href='{getUrl('','mid',$mid)}';return false;" src="./images/common/btn_cancel.gif" alt="{$lang->cmd_cancel}" />
</select>
<input type="text" name="search_keyword" value="{htmlspecialchars($search_keyword)}" class="inputTypeText"/>
<!--@if($last_division)-->
<input type="button" onclick="location.href='{getUrl('page',1,'document_srl','','division',$last_division,'last_division','')}';return false;" value="{$lang->cmd_search_next}" class="searchNextButton"/>
<!--@end-->
<input type="image" src="./images/common/btn_search.gif" alt="{$lang->cmd_search}" />
<input type="image" onclick="location.href='{getUrl('','mid',$mid)}';return false;" src="./images/common/btn_cancel.gif" alt="{$lang->cmd_cancel}" />
</fieldset>
</form>
<!--@end-->

View file

@ -37,15 +37,15 @@
<!-- 페이지 네비게이션 -->
<div class="pageNavigation">
<a href="{getUrl('page','','document_srl','')}" class="goToFirst"><img src="./images/common/bottomGotoFirst.gif" alt="{$lang->first_page}" width="7" height="5" /></a>
<a href="{getUrl('page','','document_srl','','division',$division,'last_division',$last_division)}" class="goToFirst"><img src="./images/common/bottomGotoFirst.gif" alt="{$lang->first_page}" width="7" height="5" /></a>
<!--@while($page_no = $page_navigation->getNextPage())-->
<!--@if($page == $page_no)-->
<span class="current">{$page_no}</span>
<!--@else-->
<a href="{getUrl('page',$page_no,'document_srl','')}">{$page_no}</a>
<a href="{getUrl('page',$page_no,'document_srl','','division',$division,'last_division',$last_division)}">{$page_no}</a>
<!--@end-->
<!--@end-->
<a href="{getUrl('page',$page_navigation->last_page,'document_srl','')}" class="goToLast"><img src="./images/common/bottomGotoLast.gif" alt="{$lang->last_page}" width="7" height="5" /></a>
<a href="{getUrl('page',$page_navigation->last_page,'document_srl','','division',$division,'last_division',$last_division)}" class="goToLast"><img src="./images/common/bottomGotoLast.gif" alt="{$lang->last_page}" width="7" height="5" /></a>
</div>
@ -61,8 +61,12 @@
<option value="{$key}" <!--@if($search_target==$key)-->selected="selected"<!--@end-->>{$val}</option>
<!--@end-->
</select>
<input type="text" name="search_keyword" value="{htmlspecialchars($search_keyword)}" class="inputTypeText"/><a href="#" onclick="xGetElementById('fo_search').submit();return false;" class="button"><span>{$lang->cmd_search}</span></a><a href="{getUrl('','mid',$mid,'listStyle',$listStyle)}" class="button"><span>{$lang->cmd_cancel}</span></a>
<input type="text" name="search_keyword" value="{htmlspecialchars($search_keyword)}" class="inputTypeText"/>
<!--@if($last_division)-->
<a href="{getUrl('page',1,'document_srl','','division',$last_division,'last_division','')}" class="button"><span>{$lang->cmd_search_next}</span></a>
<!--@end-->
<a href="#" onclick="xGetElementById('fo_search').submit();return false;" class="button"><span>{$lang->cmd_search}</span></a>
<a href="{getUrl('','mid',$mid,'listStyle',$listStyle)}" class="button"><span>{$lang->cmd_cancel}</span></a>
</form>
</div>
<!--@end-->

View file

@ -139,10 +139,13 @@
$args->page_count = $obj->page_count?$obj->page_count:10;
$args->start_date = $obj->start_date?$obj->start_date:null;
$args->end_date = $obj->end_date?$obj->end_date:null;
//if($except_notice) $args->s_is_notice = 'N';
// 기본으로 사용할 query id 지정 (몇가지 검색 옵션에 따라 query id가 변경됨)
$query_id = 'document.getDocumentList';
// 내용검색일 경우 document division을 지정하여 검색하기 위한 처리
$use_division = false;
// 검색 옵션 정리
$search_target = $obj->search_target;
$search_keyword = $obj->search_keyword;
@ -151,15 +154,18 @@
case 'title' :
if($search_keyword) $search_keyword = str_replace(' ','%',$search_keyword);
$args->s_title = $search_keyword;
$use_division = true;
break;
case 'content' :
if($search_keyword) $search_keyword = str_replace(' ','%',$search_keyword);
$args->s_content = $search_keyword;
$use_division = true;
break;
case 'title_content' :
if($search_keyword) $search_keyword = str_replace(' ','%',$search_keyword);
$args->s_title = $search_keyword;
$args->s_content = $search_keyword;
$use_division = true;
break;
case 'user_id' :
if($search_keyword) $search_keyword = str_replace(' ','%',$search_keyword);
@ -225,16 +231,73 @@
$args->s_comment = $search_keyword;
$args->sort_index = 'documents.'.$args->sort_index;
$query_id = 'document.getDocumentListWithinComment';
$use_division = true;
break;
default :
preg_match('/^extra_vars([0-9]+)$/',$search_target,$matches);
if($matches[1]) {
$args->{"s_extra_vars".$matches[1]} = $search_keyword;
$use_division = true;
}
break;
}
}
/**
* 만약 use_division이 true일 경우 document division을 이용하도록 변경
**/
if($use_division) {
// 시작 division
$division = (int)Context::get('division');
// division값이 없다면 제일 상위
if(!$division) {
$division_args->module_srl = $args->module_srl;
$division_args->list_count = 1;
$division_args->sort_index = $args->sort_index;
$division_args->order_type = $args->order_type;
$output = executeQuery("document.getDocumentList", $division_args);
if($output->data) {
$item = array_pop($output->data);
$division = $item->list_order;
}
$division_args = null;
}
// 마지막 division
$last_division = (int)Context::get('last_division');
// 지정된 division에서부터 5000개 후의 division값을 구함
if(!$last_division) {
$last_division_args->module_srl = $args->module_srl;
$last_division_args->list_count = 1;
$last_division_args->sort_index = $args->sort_index;
$last_division_args->order_type = $args->order_type;
$last_division_args->list_order = $division;
$last_division_args->page = 5001;
$output = executeQuery("document.getDocumentDivision", $last_division_args);
if($output->data) {
$item = array_pop($output->data);
$last_division = $item->list_order;
}
}
// last_division 이후로 글이 있는지 확인
if($last_division) {
$last_division_args = null;
$last_division_args->module_srl = $args->module_srl;
$last_division_args->list_order = $last_division;
$output = executeQuery("document.getDocumentDivisionCount", $last_division_args);
if($output->data->count<1) $last_division = null;
}
$args->division = $division;
$args->last_division = $last_division;
Context::set('division', $division);
Context::set('last_division', $last_division);
}
// document.getDocumentList 쿼리 실행
$output = executeQueryArray($query_id, $args);

View file

@ -14,6 +14,8 @@
$lang->title_bold = 'Bold';
$lang->title_color = 'Color';
$lang->cmd_search_next = '계속 검색';
$lang->cmd_temp_save = 'Temporary Save';
$lang->cmd_toggle_checked_document = 'Reverse selected items';

View file

@ -14,6 +14,8 @@
$lang->title_bold = '제목 굵게';
$lang->title_color = '제목 색깔';
$lang->cmd_search_next = '계속 검색';
$lang->cmd_temp_save = '임시 저장';
$lang->cmd_toggle_checked_document = '선택항목 반전';

View file

@ -13,6 +13,8 @@
$lang->move_target_module = "移動対象モジュール";
$lang->title_bold = 'タイトル太字';
$lang->title_color = 'タイトル文字色';
$lang->cmd_search_next = '계속 검색';
$lang->cmd_temp_save = '臨時保存';

View file

@ -13,6 +13,8 @@
$lang->title_bold = '제목 굵게';
$lang->title_color = '제목 색깔';
$lang->cmd_search_next = '계속 검색';
$lang->cmd_temp_save = '임시 저장';
$lang->cmd_toggle_checked_document = '선택항목 반전';

View file

@ -14,6 +14,8 @@
$lang->title_bold = 'Жирное Название';
$lang->title_color = 'Цвет Названия';
$lang->cmd_search_next = '계속 검색';
$lang->cmd_temp_save = 'Сохранить временно';
$lang->cmd_toggle_checked_document = 'Перевернуть выбранные объекты';

View file

@ -14,6 +14,8 @@
$lang->title_bold = '粗标题';
$lang->title_color = '标题颜色';
$lang->cmd_search_next = '계속 검색';
$lang->cmd_temp_save = '临时保存';
$lang->cmd_toggle_checked_document = '反选';

View file

@ -0,0 +1,18 @@
<query id="getDocumentDivision" action="select">
<tables>
<table name="documents" />
</tables>
<columns>
<column name="*" />
</columns>
<conditions>
<condition operation="in" column="module_srl" var="module_srl" filter="number" />
<condition operation="more" column="list_order" var="list_order" filter="number" pipe="and" />
</conditions>
<navigation>
<index var="sort_index" default="list_order" order="order_type" />
<list_count var="list_count" default="1" />
<page_count var="page_count" default="1" />
<page var="page" default="1" />
</navigation>
</query>

View file

@ -0,0 +1,12 @@
<query id="getDocumentDivisionCount" action="select">
<tables>
<table name="documents" />
</tables>
<columns>
<column name="count(*)" alias="count"/>
</columns>
<conditions>
<condition operation="in" column="module_srl" var="module_srl" filter="number" />
<condition operation="excess" column="list_order" var="list_order" filter="number" pipe="and" />
</conditions>
</query>

View file

@ -8,6 +8,11 @@
<conditions>
<condition operation="in" column="module_srl" var="module_srl" filter="number" />
<condition operation="equal" column="category_srl" var="category_srl" pipe="and" />
<condition operation="equal" column="is_notice" var="s_is_notice" pipe="and" />
<group pipe="and">
<condition operation="more" column="list_order" var="division" pipe="and" />
<condition operation="below" column="list_order" var="last_division" pipe="and" />
</group>
<group pipe="and">
<condition operation="like" column="title" var="s_title" />
<condition operation="like" column="content" var="s_content" pipe="or" />
@ -48,7 +53,6 @@
<condition operation="like" column="extra_vars19" var="s_extra_vars19" pipe="or" />
<condition operation="like" column="extra_vars20" var="s_extra_vars20" pipe="or" />
</group>
<condition operation="equal" column="is_notice" var="s_is_notice" pipe="and" />
<group pipe="and">
<condition operation="more" column="last_update" var="start_date" pipe="and" />
<condition operation="less" column="last_update" var="end_date" pipe="and" />

View file

@ -8,7 +8,12 @@
</columns>
<conditions>
<condition operation="in" column="documents.module_srl" var="module_srl" filter="number" />
<condition operation="equal" column="documents.category_srl" var="category_srl" pipe="and" />
<condition operation="equal" column="documents.document_srl" default="comments.document_srl" notnull="notnull" pipe="and" />
<group pipe="and">
<condition operation="more" column="documents.list_order" var="division" pipe="and" />
<condition operation="below" column="documents.list_order" var="last_division" pipe="and" />
</group>
<condition operation="like" column="comments.content" var="s_comment" notnull="notnull" pipe="and" />
</conditions>
<navigation>

View file

@ -47,3 +47,5 @@
.pageNavigation a.goToLast img { display:inline-block; padding:2px 0; position:relative; top:2px; _top:1px;}
.pageNavigation .current { position:relative; margin-left:-4px; font:bold 1em Tahoma; color:#ff6600; display:inline-block; padding:1px 7px 1px 6px; border-left:1px solid #dedfde; border-right:1px solid #CCCCCC; text-decoration:none; line-height:1em; }
.searchNext { text-align:center; margin-top:10px;}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 756 B

After

Width:  |  Height:  |  Size: 409 B

Before After
Before After

View file

@ -34,13 +34,6 @@
<!--@else-->
<div id="content">
<h3 class="result">{$result_text}</h3>
<!--
<ul class="sortBy">
<!--@foreach($lang->is_sort_option as $key => $val)-->
<li class="on"><a href="#">{$val}</a></li>
<!--@end-->
</ul>
-->
<ul class="searchResult">
<!--@foreach($document_list as $no => $document)-->
<li>
@ -58,17 +51,22 @@
<!--@end-->
</ul>
<div class="pageNavigation">
<a href="{getUrl('page','','document_srl','','search_target',$search_target,'is_keyword',$is_keyword)}" class="goToFirst"><img src="./images/{$module_info->colorset}/bottomGotoFirst.gif" alt="{$lang->first_page}" width="7" height="5" /></a>
<a href="{getUrl('page','','document_srl','','search_target',$search_target,'is_keyword',$is_keyword,'division',$division,'last_division',$last_division)}" class="goToFirst"><img src="./images/{$module_info->colorset}/bottomGotoFirst.gif" alt="{$lang->first_page}" width="7" height="5" /></a>
<!--@while($page_no = $page_navigation->getNextPage())-->
<!--@if($page == $page_no)-->
<span class="current">{$page_no}</span>
<!--@else-->
<a href="{getUrl('page',$page_no,'document_srl','','search_target',$search_target,'is_keyword',$is_keyword)}">{$page_no}</a>
<a href="{getUrl('page',$page_no,'document_srl','','search_target',$search_target,'is_keyword',$is_keyword,'division',$division,'last_division',$last_division)}">{$page_no}</a>
<!--@end-->
<!--@end-->
<a href="{getUrl('page',$page_navigation->last_page,'document_srl','','search_target',$search_target,'is_keyword',$is_keyword)}" class="goToLast"><img src="./images/{$module_info->colorset}/bottomGotoLast.gif" alt="{$lang->last_page}" width="7" height="5" /></a>
<a href="{getUrl('page',$page_navigation->last_page,'document_srl','','search_target',$search_target,'is_keyword',$is_keyword,'division',$division,'last_division',$last_division)}" class="goToLast"><img src="./images/{$module_info->colorset}/bottomGotoLast.gif" alt="{$lang->last_page}" width="7" height="5" /></a>
</div>
</div>
<!--@end-->
<!--@if($last_division)-->
<div class="searchNext">
<span class="button"><input type="button" value="{$lang->cmd_search_next}" onclick="location.href='{getUrl('page',1,'document_srl','','search_target',$search_target,'is_keyword',$is_keyword,'division',$last_division,'last_division','')}';return false;" /></span>
</div>
<!--@end-->