我现在需要的是根据查看文章中的关键词,查询出两篇文章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,最后是根据关键词关联了一个冷词,排序,如果冷词也一样就不用考虑了,就直接取前两个就行了,但是排序是要有的
如果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,最后是根据关键词关联了一个冷词,排序,如果冷词也一样就不用考虑了,就直接取前两个就行了,但是排序是要有的
--关键词关联文章数量表
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相同,但他包含了查看文章中的关键词中的一个“热词”,重卡,所以不显示这条信息)
如果关键词个数相同,就按照发布时间排序,这个我做出来了
我需要的是,如果关键词个数相同,并且发布时间相同,那么就按照谁包含了冷词就显示哪个