日期:2014-05-18  浏览次数:20519 次

寻求最优化:同一个记录属于多个分类,查询某分类时最优sql语句?
假如我有一个文章

同时属于分类1,分类二,分类3 .....

想请教下大侠们,这个数据库怎么设计最合理?

查询某分类下记录时sql语句怎么最优化?


用like好像不是很理想。谢谢。

------解决方案--------------------
SQL code

declare @Article table (ArticleName varchar(6),ArticleContent varchar(7),ArticleType varchar(6))
insert into @Article
select 'asdf','sdf','1' union all
select 'sdfsd','sdfads','2' union all
select 'sadfas','dsfsa','3' union all
select 'sadf','sdfs','4,5' union all
select 'sadf','fewsfd','5' union all
select 'asdf','sfes','6' union all
select 'sdfsf','esef','7' union all
select 'aasdf','sdfsdf','3,4' union all
select 'asdfas','fesfdfs','2' union all
select 'safas','sfef','4' union all
select 'sadf','sfasf','3'

select * from @Article where charindex('4,',ArticleType+',')<>0

/*
ArticleName ArticleContent ArticleType
----------- -------------- -----------
sadf        sdfs           4,5
aasdf       sdfsdf         3,4
safas       sfef           4
*/

-- 如果因为较少的数据,而把库设计成这样,效率就差了太多了

------解决方案--------------------
1.文章表中建一个字段,保存'分类1,分类二,分类3'
2.建一个表,两个字段,文章ID,类别ID,关联文章和类别
------解决方案--------------------
还是另外建一个表方便一点 用两个字段 文章ID 类别ID 来关联第一个表 这样查询方便一点
------解决方案--------------------
A:文章ID,文章名称
B:分类ID,分类名称
C:文章ID,分类ID

SELECT B.*,A.* FROM B INNER JOIN C 
 ON (B.分类ID=C.分类ID)
 INNER JOIN A ON (A.文章ID=C.文章ID)
WHERE B.分类ID='XXXX'



------解决方案--------------------
分两个表吧,一个文章表,一个分类表,有文章ID关联两个表