文章数据表 (article), 其中有一个字段categoryId 是varchar 类型,存放多个文章分类的ID,代表这篇文章属于多个分类。

于娜 2007-08-24 07:42:12
文章数据表 (article), 其中有一个字段categoryId 是varchar 类型,存放多个文章分类的ID,代表这篇文章属于多个分类。



下面是一个SQL存储过程, 假设用户给定一个参数变量 @categoryId , 要的到属于该categoryId 的所有文章。

declare @categoryId varchar(2000)
set @categoryId = '2|8|45|78|4|23' -- 这个存放的都是分类的ID


要得到所有属于该分类的文章,怎么写SQL ??

是不是要用 WHILE 循环



...全文
234 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
vrhero 2007-08-24
  • 打赏
  • 举报
回复
lz应该学习下数据库设计原理课...不知道思归肯不肯教...呵呵...
saucer 2007-08-24
  • 打赏
  • 举报
回复
你不会在categoryId字段里有“33|44|55”这样的数据吧?

如果要查询的分类很多的话,能动态生成SQL的话,还不如直接生成WHERE部分

或者你的查询有规律的话(譬如钢铁,煤矿,。。等,可以再聚合为“工业”这个大类),这样
不是查“钢铁|煤矿”,而是用“工业”来查。。。。

还有,为什么用varchar,而不是整数?
于娜 2007-08-24
  • 打赏
  • 举报
回复


select * from yourtable where charindex('|'+categoryId +'|',@categoryId) >0


使用这样方法,如果有很多 分类 33|44|55,只能 WHILE循环 拼接SQL字串了吗? 用 OR 来拼接 ??
于娜 2007-08-24
  • 打赏
  • 举报
回复
好方法,果然是思归
saucer 2007-08-24
  • 打赏
  • 举报
回复
一种方法是把输出的字符串通过字符分割把它转换成一个内存中的表,然后再做JOIN,参考
http://sql-server-performance.com/Community/forums/p/20608/114964.aspx

另一个方法是在你的字符串前后加|

declare @categoryId varchar(2000)
set @categoryId = '|2|8|45|78|4|23|'

然后用charindex方法看你字段 '|'+categoryId +'|'是否在@categoryId

select * from yourtable where charindex('|'+categoryId +'|',@categoryId) >0
于娜 2007-08-24
  • 打赏
  • 举报
回复
文章数据表 (article), 其中有一个字段categoryId 是varchar 类型,存放多个文章分类的ID,代表这篇文章属于多个分类。形式类似 "33|45|66|78"



下面是一个SQL存储过程, 假设用户给定一个参数变量 @categoryId , 要的到属于该categoryId 的所有文章。

declare @categoryId varchar(2000)
set @categoryId = '2|8|45|78|4|23' -- 这个存放的都是分类的ID


要得到所有属于该分类的文章,怎么写SQL ??

是不是要用 WHILE 循环

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧