我现在需要的是根据查看文章中的关键词,查询出两篇文章IsEnable='true' and IsPublish='true' 并且与查看的文章中的关键词关联个数最多的文章,如果那有三篇以上的文章关联的个数相同,那么就根据publishTime desc排序,取出前两篇
如果publishTime也相同那么那篇文章包含“冷词”就显示(冷词:该关键词关联的文章数量比较少)
例:
我现在查看的文章是第一篇文章,那么它的关键词是'联合卡车'和'卡车'
查询出的前两篇文章应该是2,4 因为2关联1中的关键词最多。4和3中关联的关键词与1相同,但是4比3的发帖时间靠近现在时间,所以是4。因为5的IsEnable='false',IsPublish='false'所以不显示,现在请各位好心人帮助我一下,先谢谢了
表结构:--文章表(文章Id,是否可见,是否发布,发布时间,关键词)
create table AC_Article
(
    ArticleId int,
    IsEnable  bit,
    IsPublish bit,
    publishTime datetime,
    KeyWords varchar(100)
)insert into AC_Article
select 1,'true','true','2010-1-1 10:59:00','联合卡车,卡车' union all
select 2,'true','true','2010-1-2 10:59:00','联合卡车,货车,卡车' union all
select 3,'true','true','2010-1-3 10:59:00','东风,卡车,油车' union all
select 4,'true','true','2010-1-4 10:59:00','联合卡车,搅拌车,自卸,轻卡' union all
select 5,'false','false','2011-1-5 11:11:11','联合卡车,卡车'--关键词--文章关系表
insert [AC_Article_KeyWords_Relation]
select b.KeyWords,a.ArticleId
from (select ArticleId,KeyWords=case when isnull(KeyWords,'') = '' then '卡车' else KeyWords end from [AC_Article] where IsPublish='true' and IsEnable='true') a 
cross apply (
    select KeyWords=SUBSTRING(a.KeyWords,number,CHARINDEX(',',a.KeyWords+',',number+1)-number)
    from master..spt_values
    where CHARINDEX(',',','+a.KeyWords,number) = number AND type = 'P'
) b order by b.KeyWords
--查询出文章,先根据关联的关键词排序,如果相同,按照发帖时间排
select aakr.ArticleId from [AC_Article_KeyWords_Relation] as aakr,[AC_Article] as aa 
where aakr.KeyWords in(select KeyWords from [AC_Article_KeyWords_Relation] 
where ArticleId=12594) and aakr.ArticleId!=12594 and aa.ArticleId=aakr.ArticleId and IsEnable='true' and IsPublish='true' 
group by aakr.ArticleId,publishDatetime
order by count(*) desc,PublishDateTime desc
谁帮我补充一下啊,我最后查询出的只要ArticleId,最后是根据关键词关联了一个冷词,排序,如果冷词也一样就不用考虑了,就直接取前两个就行了,但是排序是要有的

解决方案 »

  1.   


    --关键词关联文章数量表
    delete from [ac_keywords_articleCount]insert into [AC_KeyWords_ArticleCount]select aakr.KeyWords,count(aakr.articleId) as ArticleCount from [AC_Article_KeyWords_Relation] as aakr,[AC_Article] as aa  where aakr.articleId=aa.ArticleId and IsEnable='True' and IsPublish='True' group by aakr.KeyWords order by count(aakr.articleId) desc
    --假设该表的数据为
    卡车 6032
    重卡 62
    商用车 28
    轻卡 27
    皮卡 17
    陕汽 17
    东风 16
    潍柴 3
    奥威 2
    欧卡 2
    广汽 2
    轻型车 1
    凯瑞 1
    凯马 1--如果我查出的数据中如下(其中只有ArticleId有用,其他为说明)
    --ArticleId   包含的关键词数   
    1 6
    2 4
    3 3
    4 3
    5 2
    6 1 (关键词个数和7相同,文章发布日期和7相同,但他包含了查看文章中的关键词中的一个“冷词”,凯马)
    7 1 (关键词个数和6相同,文章发布日期和6相同,但他包含了查看文章中的关键词中的一个“热词”,重卡,所以不显示这条信息)
    如果关键词个数相同,就按照发布时间排序,这个我做出来了
    我需要的是,如果关键词个数相同,并且发布时间相同,那么就按照谁包含了冷词就显示哪个