有一个文章表,有两个字段,articleinfo ( aid int, tids varchar(100)) aid为文章ID,tids为标签ID字符串,一篇文章对应多个标签ID,tids保存的格式为"1,2,3,11,12,13" (不包括双引号),如何查询标签为@tagId(整形,如1)的文章列表呢。
PS:最好是已经测试过的
是指查询一行数据么?
你的意思是这样么 select * from articleinfo where tids=@tagid;
tids=@tagid 这样明显不行的,@tagId为整形,即使转换成字符型,'1,2,3' = '1',也永远得不到正确的结果吧
通过模糊查询找到啊,可以用like,或者用charindex,如:
like: select * from articleinfo where tids like '%1%'
charindex: select * from articleinfo where charindex('1',tids)>0
条件中最好这样写:charindex(',1,',','+tids+',') 可以避免出现重复字符的问题
若是tagids = '11,12,13',模糊查询就会出问题。
PS:题目给的示例有误导,又补充了一点
所以说让在模糊查询的编号或ID的两边加上逗号,将它们作为一个条件进行查询,这样就确保了不会出现重复的编号或ID:
如:tagids = '1,2,3,11,12,13' 查ID为11的或1的文章:
条件 :where ',' + tids + ',' like '%,1,%' (或者用上面charindex的方法也行)
除了这个问题,还有其它什么问题吗
@白雲天: 明白了,十分感谢,暂无其他问题的