配置表的意思为,比如#FF0000,它可以算作是红色,也可以算作是橘色。
比如我添加2个查询颜色:红色+橘色 那么查询表中的选择为:必须要有红色和橘色,这里占用2个字段,其他字段有可能能为空,如果不为空的情况下,那其他三个只要是这两个就行。满足类似这种情况
红色 橘色 橘色 橘色 橘色 、、、、、、橘色橘色橘色红色 、、、、橘色红色、、、红色橘色。(无顺序)
如果不考虑效率,我会这样去写:
create function fn_GetColorsByCode(@code varchar(10)) returns varchar(20) as begin declare @colors varchar(20) select top 1 @colors IsNULL(COne,'')+IsNull(CTwo,'') from 配置表 where Code = @code return @colors end select * from ( select *,colors=(fn_GetColorsByCode(t.ChildColor1) + fn_GetColorsByCode(t.ChildColor2) + fn_GetColorsByCode(t.ChildColor3) + fn_GetColorsByCode(t.ChildColor4) + fn_GetColorsByCode(t.ChildColor5)) from Table t ) as t1 where t1.colors like '%红色%' and t1.colors like '%橘色%' 记事本的,没测试,大概就是这个意思。
你这里的cone+ctwo处理是不对的,因为它是一个or的概念。满足其一,另一满足为下个字段满足。
比如一条数据是:ChildColor1:#6F9191(青色 灰色)ChildColor2:#77A0BB(蓝色 灰色)ChildColor3:#667B99(蓝色 灰色)。 然后这条数据应该怎样被查询到呢,应该是添加(青色,蓝色)or (灰色,蓝色) or (灰色) or (青色,灰色) or (青色,灰色,蓝色)。这样可能有点乱,它是个由上至下的概念。如图。
@光明中的黑手: 这也简单,你把每个函数里的连接符和colors的连接符分开设置即可。
@幻天芒: 谢谢!我解决了,我把这种组合全部穷举出来,然后写入另一张表,用位计算去存储他们,这样性能应该不会差。
@光明中的黑手: 数据量较大的时候,穷举有点麻烦。效率不会成为瓶颈。
@幻天芒: 数据大的是记录表,本身文字颜色不大,就13种(红色白色...),而后记录表使用颜色code为248种(#ffffff...),字段为5个,每个字段是248种颜色,而每种颜色对应2个文字颜色。 最多的一行数据也就2的5次方组合。所以数据也不算多。
@光明中的黑手: 不多就好,还可以用一个函数来做匹配 ,类似于int fun(col1,col2) ,匹配了就返回1,然后5个这样的函数求和,大于等于2即可。
你是做的电子商务网站吗?
不是,是个应用