加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

用于搜刮具有无穷数目的位字段的表的SQL计划要领

发布时间:2021-04-01 00:19:04 所属栏目:编程 来源:网络整理
导读:思量搜刮包括公寓租赁信息的表:行使该界面的客户端选择在数据库中暗示为位字段的多个前提,譬喻: AllowPets HasParking HasDeck ModernKitchen 等等.. 我们面对的环境是,我们软件的每个新客户都有他们但愿应承最终用户搜刮的其他字段.位字段的数目可以到达数

在上面的搜刮查询中,我只是包括了要搜刮的属性ID的CSV字符串.现实上,您可以建设一个搜刮存储进程,在个中传入包括要搜刮的ID的CSV参数.您可以查察this answer以相识可以将CSV字符串无轮回拆分到可以插手的表中.这将导致不必要行使任何动态SQL.

编辑基于很多评述:

假如向#AttributeTypes表添加几列,则可以动态构建搜刮页面.以下是一些提议:

>状态:“A”ctive“I”nactive
> ListOrder:可以行使它来排序以构建屏幕
> ColumnNumber:可以辅佐组织统一屏幕行上的字段
> AttributeGroupID:分组字段,见下文
>等

您可以建设全部字段复选框,或添加另一个名为#AttributesGroups的表,并将其组合在一路并行使单选按钮.譬喻,因为“Pets Allowed”和“No Pets”是独有的,因此在#AttributesGroups表“Pets”中添加一行.应用措施将在界面中对属性举办分组.组中的属性与通例的未组合属性沟通,只需网络选定的ID并将其转达给搜刮进程.可是,对付每个组,您必要让应用措施包括“无首选项”单选按钮并将其默认打开.此选项没有属性ID,由于您不想思量该属性,以是不会传入该选项.

在我的示例中,我确拭魅展示了#Apartments中的“超等属性”的示例
表,“状态”.您应该只思量此表的首要属性.假如您开始行使这些,您也许但愿将CTE变动为FROM #Apartments并对这些字段举办过滤,然后插手#Attributes.可是你会碰着Dynamic Search Conditions,so read this article by Erland Sommarskog的题目.

编辑最新评述:

这里是代码,有一个解除属性列表:

;WITH GetMatchingAttributes AS
(
SELECT
    ApartmentID,3)  --<<change dynamically or split an include CSV string and join in
    GROUP BY ApartmentID
    HAVING COUNT(AttributeID)=3--<<change dynamically or split a CSV string and use COUNT(*) from resulting include table
),SomeRemoved AS
(
SELECT
    m.ApartmentID
    FROM GetMatchingAttributes      m
        LEFT OUTER JOIN #Attributes a ON m.ApartmentID=a.ApartmentID 
            AND a.AttributeType IN (5,6)   --<<change dynamically or split an exclude CSV string and join in
    WHERE a.ApartmentID IS NULL
)
SELECT
    a.*
    FROM #Apartments           a
        INNER JOIN SomeRemoved m ON a.ApartmentID=m.ApartmentID
    WHERE a.Status='A'

我不以为我会这样做.我会凭证我之前编辑的要领举办操纵.当必要包括/解除属性时,我只为每个属性添加一个属性:“应承携带宠物”和“榨取携带宠物”.

我更新了原始帖子中的示例数据以表现此信息.

运行原始查询:

>(..,..,6,..)找到应承携带宠物的公寓
>(..,7,..)找到不应承携带宠物的公寓
>(..,..)假如没有偏好.

我以为这是更好的要领.当与上一次编辑中描写的分组构想和动态构建的搜刮页面团结行使时,我以为这会更好而且运行得更快.

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读