From d4c54e20d16f5141b78973753010006b29d7b7af Mon Sep 17 00:00:00 2001 From: tanghucheng Date: Thu, 8 Jun 2023 05:11:37 +0000 Subject: [PATCH] * Fix bug #35718, dameng database full text search sql error. --- module/search/model.php | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/module/search/model.php b/module/search/model.php index 82e4b2d8fa..b5215b30ce 100644 --- a/module/search/model.php +++ b/module/search/model.php @@ -711,17 +711,27 @@ class searchModel extends model } } - $scoreColumn = "(MATCH(title, content) AGAINST('{$againstCond}' IN BOOLEAN MODE))"; - $stmt = $this->dao->select("*, {$scoreColumn} as score") + $orderBy = 'score_desc, editedDate_desc'; + $scoreColumn = "*, (MATCH(title, content) AGAINST('{$againstCond}' IN BOOLEAN MODE)) as score"; + $whereCondition = "(MATCH(title,content) AGAINST('{$againstCond}' IN BOOLEAN MODE) >= 1 {$likeCondition})"; + + if($this->config->db->driver == 'dm') + { + $whereCondition = preg_replace("/\b(AND|OR)\b/", "", $likeCondition, 1); + $scoreColumn = '*'; + $orderBy = 'editedDate_desc'; + } + + $stmt = $this->dao->select($scoreColumn) ->from(TABLE_SEARCHINDEX) - ->where("(MATCH(title,content) AGAINST('{$againstCond}' IN BOOLEAN MODE) >= 1 {$likeCondition})") + ->where("($whereCondition)") ->andWhere('((vision')->eq($this->config->vision) ->andWhere('objectType')->in($allowedObject) ->markRight(1) ->orWhere('(objectType')->in($filterObject) ->markRight(2) ->andWhere('addedDate')->le(helper::now()) - ->orderBy('score_desc, editedDate_desc') + ->orderBy($orderBy) ->query(); $idListGroup = array();