/// <summary> /// 在指定栏目下搜索关键词相关的内容 /// </summary> /// <param name="categoryRgt"></param> /// <param name="keyword"></param> /// <param name="pageSize"></param> /// <param name="currentPageIndex"></param> /// <param name="recordCount"></param> /// <param name="pageCount"></param> /// <param name="orderby"></param> /// <param name="siteId"></param> /// <param name="categoryLft"></param> /// <param name="func"></param> /// <returns></returns> public void SearchArchivesByCategory(int siteId, int categoryLft, int categoryRgt, string keyword, int pageSize, int currentPageIndex, out int recordCount, out int pageCount, string orderby, DataReaderFunc func) { const string condition = " flags LIKE '%st:''0''%'AND flags LIKE '%v:''1''%' "; if (String.IsNullOrEmpty(orderby)) { orderby = String.Intern("ORDER BY $PREFIX_archive.sort_number DESC"); } object[,] data = new object[, ] { { "@siteId", siteId }, { "@lft", categoryLft }, { "@rgt", categoryRgt } }; //为第一页时 const string sql1 = @"SELECT TOP $[pagesize] $PREFIX_archive.id AS ID,* FROM $PREFIX_archive INNER JOIN $PREFIX_category ON $PREFIX_archive.[CgID]=$PREFIX_category.id WHERE $[condition] AND $PREFIX_category.site_id=@siteId AND ($PREFIX_category.lft>=@lft AND $PREFIX_category.rgt<=@rgt) AND ([Title] LIKE '%$[keyword]%' OR [Outline] LIKE '%$[keyword]%' OR [Content] LIKE '%$[keyword]%' OR [Tags] LIKE '%$[keyword]%') $[orderby],$PREFIX_archive.id"; //记录数 recordCount = int.Parse(base.ExecuteScalar( SqlQueryHelper.Format(DbSql.ArchiveGetSearchRecordCountByCategoryId, data, keyword, condition )).ToString()); //页数 pageCount = recordCount / pageSize; if (recordCount % pageSize != 0) { pageCount++; } //对当前页数进行验证 if (currentPageIndex > pageCount && currentPageIndex != 1) { currentPageIndex = pageCount; } if (currentPageIndex < 1) { currentPageIndex = 1; } //跳过记录数 int skipCount = pageSize * (currentPageIndex - 1); string sql = skipCount == 0 && base.DbType == DataBaseType.OLEDB ? sql1 : DbSql.ArchiveGetPagedSearchArchivesByCategoryId; sql = SQLRegex.Replace(sql, (match) => { switch (match.Groups[1].Value) { case "siteid": return(siteId.ToString()); case "condition": return(condition); case "pagesize": return(pageSize.ToString()); case "skipsize": return(skipCount.ToString()); case "keyword": return(keyword); case "orderby": return(orderby); } return(null); }); base.ExecuteReader(SqlQueryHelper.Format(sql, data), func); }
/// <summary> /// 搜索关键词相关的内容 /// </summary> /// <param name="siteId"></param> /// <param name="categoryRgt"></param> /// <param name="onlyMatchTitle"></param> /// <param name="keyword"></param> /// <param name="pageSize"></param> /// <param name="currentPageIndex"></param> /// <param name="recordCount"></param> /// <param name="pageCount"></param> /// <param name="orderby"></param> /// <param name="func"></param> /// <param name="categoryLft"></param> /// <returns></returns> public void SearchArchives(int siteId, int categoryLft, int categoryRgt, bool onlyMatchTitle, string keyword, int pageSize, int currentPageIndex, out int recordCount, out int pageCount, string orderby, DataReaderFunc func) { /* * string condition = ArchiveFlag.GetSQLString(new string[,]{ * {"st","0"}, * {"v","1"} * }); */ base.CheckSqlInject(keyword, orderby); StringBuilder sb = new StringBuilder(" flags LIKE '%st:''0''%' AND flags LIKE '%v:''1''%' "); if (siteId > 0) { sb.Append(" AND $PREFIX_category.site_id=").Append(siteId.ToString()); } if (categoryLft > 0 && categoryRgt > 0) { sb.Append(" AND ($PREFIX_category.lft>=").Append(categoryLft.ToString()) .Append(" AND $PREFIX_category.rgt<=").Append(categoryRgt).Append(")"); } if (onlyMatchTitle) { sb.Append(" AND title LIKE '%").Append(keyword).Append("%'"); } else { sb.Append(" AND ( title LIKE '%").Append(keyword).Append("%' OR outline LIKE '%").Append(keyword).Append("%' OR content LIKE '%").Append(keyword).Append("%')"); } string condition = sb.ToString(); //排序规则 if (String.IsNullOrEmpty(orderby)) { orderby = String.Intern("ORDER BY $PREFIX_archive.sort_number DESC"); } //记录数 recordCount = int.Parse(base.ExecuteScalar(SqlQueryHelper.Format(DbSql.Archive_GetSearchRecordCount, condition)).ToString()); //页数 pageCount = recordCount / pageSize; if (recordCount % pageSize != 0) { pageCount++; } //对当前页数进行验证 if (currentPageIndex > pageCount && currentPageIndex != 1) { currentPageIndex = pageCount; } if (currentPageIndex < 1) { currentPageIndex = 1; } //跳过记录数 int skipCount = pageSize * (currentPageIndex - 1); //如果调过记录为0条,且为OLEDB时候,则用sql1 string sql = DbSql.Archive_GetPagedSearchArchives; sql = SQLRegex.Replace(sql, (match) => { switch (match.Groups[1].Value) { case "condition": return(condition); case "pagesize": return(pageSize.ToString()); case "skipsize": return(skipCount.ToString()); case "orderby": return(orderby); } return(null); }); base.ExecuteReader(base.NewQuery(sql, null), func); }