使用自定义分页优化搜索SQL

Bil*_*lla 8 c# sql sql-server asp.net sql-server-2008

使用asp.net mvc应用程序和c#.我们正在开发搜索页面.

更新了我的答案.请在下面查看我自己的答案并提出建议

不幸的是,选择进入sql azure不起作用http://blogs.msdn.com/b/sqlazure/archive/2010/05/04/10007212.aspx

帮我

我有以下表格来显示我的项目搜索结果

物品表

  • ITEMID,SHOPID,ITEMNAME,DESCRIPTION,PRICE,CATID

商店表

  • SHOPId,HEADER,CITYID,ACTIVE

城市表

  • CITYID,CITYName,REGIONID,CountryISO

分类表

  • CATID,CATNAME

这是我的搜索查询,它给出了给定条件的分页结果

DECLARE @unitItems INT=20
DECLARE @sortOrder INT=0
DECLARE @catId INT
DECLARE @search NVARCHAR (100)=''
DECLARE @REGIONID INT=0
DECLARE @cityId INT=0
DECLARE @maxPrice DECIMAL (10, 2)
DECLARE @page INT
DECLARE @currentDate DATETIME2 (0)
set @unitItems=20
set @catId=0
set @sortOrder=0
set @search=''
set @cityId=1
set @maxPrice=0
set @page=1
set @currentDate='2013-02-24 13:14:58.073'

;WITH itemresult AS (
  SELECT IT.ITEMID, IT.ITEMNAME, IT.DESCRIPTION, IT.PRICE,
  IT.CATID, C.CATNAME AS CATNAME,S.HEADER AS SHOPHEADER,CI.CITYNAME AS CITY, 
  ROW_NUMBER() OVER (ORDER BY IT.SHOWDATE DESC) AS RowNumber
  FROM ITEM AS IT INNER JOIN SHOP AS S ON IT.SHOPId = S.ShopId 
  INNER JOIN CITY AS CI ON CI.CITYID = S.CITYID
  INNER JOIN COUNTRY AS CY ON CI.COUNTRYISO = CY.COUNTRYISO 
  INNER JOIN REGION AS R ON CI.REGIONID = R.REGIONID 
  INNER JOIN CITY AS CI2 ON CI2.CITYID = @cityId 
  INNER JOIN CATEGORY AS C ON IT.CATID = C.CATID    

  WHERE S.ACTIVE = 1   

  GROUP BY IT.ITEMID, IT.ITEMNAME, IT.HEADER, IT.DESCRIPTION, IT.PRICE, 
  IT.CATID, IT.SHOWDATE,S.HEADER,C.CATNAME,CI.CITYNAME) 

  SELECT IT.*, CEILING(CAST(RN AS float) / @unitItems) AS UNITPAGES, RN AS UNITROWS 
  FROM itemresult IT 
  INNER JOIN (SELECT Max(RowNumber) AS RN FROM itemresult) SUBQ ON 1=1 
  WHERE IT.RowNumber BETWEEN (@page - 1) * @unitItems + 1 
  AND @unitItems * @page 
Run Code Online (Sandbox Code Playgroud)

问题:

现在问题是我们在UI中添加了新的更改.现在搜索UI将显示如下所示的内容

第一个结果集 - >假设总共找到230条记录

正如您在小提琴中看到的那样搜索结果

第二个结果集 - > 230个记录中的不同类别和计数

CatId,CatName,TotalCountInSearch

例如:1本书25&2体育43和8其他52.显示我可以在UI中显示如下

  • 所有类别(120)
  • 书籍(25)
  • 运动(43)
  • 其他(52)

第三个结果设置 - >不同的城市和230点的记录计数

CityId,CityName,TotalCountInSearch

用于在UI中显示

  • 所有城市(10)
  • 金奈(4)
  • Banglore(3)
  • 其他(3)

我如何检索这些计数和名称,如所有类别,书籍,所有城市等?欢迎任何帮助或建议.

单击并在此处查看SQL小提琴

我想根据搜索条件得到这些计数.希望将此作为我程序的另一个结果集来进行检索

主要更新:

我在这里上传了所有架构和实际动态查询 https://github.com/Padayappa/SQLProblem/blob/master/PaginationIssue

Sak*_*ham 0

这是根据类别检索计数

select 'All categories' catname, count(*) catcount from itemtable
union all
select catname, count(catid) catcount
from itemtable inner join categorytable on categorytable.catid = itemtable.catid
group by catname
Run Code Online (Sandbox Code Playgroud)

这是根据城市检索计数

select 'All cities' cityname, count(*) catcount from itemtable
union all
select cityname, count(catid) catcount 
from itemtable inner join shoptable on itemtable.shopid = shoptable.shopid
inner join citytable on citytable.cityid = shoptable.cityid
group by cityname
Run Code Online (Sandbox Code Playgroud)