mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-01-09 19:51:42 +09:00
게시글 검색시 division을 적용하여 5000개 단위로 검색하고 계속 검색하도록 하여 속도 증가
git-svn-id: http://xe-core.googlecode.com/svn/sandbox@3155 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
parent
539c32082e
commit
1d4191e9ba
17 changed files with 148 additions and 21 deletions
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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';
|
||||
|
|
|
|||
|
|
@ -14,6 +14,8 @@
|
|||
$lang->title_bold = '제목 굵게';
|
||||
$lang->title_color = '제목 색깔';
|
||||
|
||||
$lang->cmd_search_next = '계속 검색';
|
||||
|
||||
$lang->cmd_temp_save = '임시 저장';
|
||||
|
||||
$lang->cmd_toggle_checked_document = '선택항목 반전';
|
||||
|
|
|
|||
|
|
@ -13,6 +13,8 @@
|
|||
$lang->move_target_module = "移動対象モジュール";
|
||||
$lang->title_bold = 'タイトル太字';
|
||||
$lang->title_color = 'タイトル文字色';
|
||||
|
||||
$lang->cmd_search_next = '계속 검색';
|
||||
|
||||
$lang->cmd_temp_save = '臨時保存';
|
||||
|
||||
|
|
|
|||
|
|
@ -13,6 +13,8 @@
|
|||
$lang->title_bold = '제목 굵게';
|
||||
$lang->title_color = '제목 색깔';
|
||||
|
||||
$lang->cmd_search_next = '계속 검색';
|
||||
|
||||
$lang->cmd_temp_save = '임시 저장';
|
||||
|
||||
$lang->cmd_toggle_checked_document = '선택항목 반전';
|
||||
|
|
|
|||
|
|
@ -14,6 +14,8 @@
|
|||
$lang->title_bold = 'Жирное Название';
|
||||
$lang->title_color = 'Цвет Названия';
|
||||
|
||||
$lang->cmd_search_next = '계속 검색';
|
||||
|
||||
$lang->cmd_temp_save = 'Сохранить временно';
|
||||
|
||||
$lang->cmd_toggle_checked_document = 'Перевернуть выбранные объекты';
|
||||
|
|
|
|||
|
|
@ -14,6 +14,8 @@
|
|||
$lang->title_bold = '粗标题';
|
||||
$lang->title_color = '标题颜色';
|
||||
|
||||
$lang->cmd_search_next = '계속 검색';
|
||||
|
||||
$lang->cmd_temp_save = '临时保存';
|
||||
|
||||
$lang->cmd_toggle_checked_document = '反选';
|
||||
|
|
|
|||
18
modules/document/queries/getDocumentDivision.xml
Normal file
18
modules/document/queries/getDocumentDivision.xml
Normal 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>
|
||||
12
modules/document/queries/getDocumentDivisionCount.xml
Normal file
12
modules/document/queries/getDocumentDivisionCount.xml
Normal 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>
|
||||
|
|
@ -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" />
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue