两个表,文章表和tag表,
文章表有一个字段是存放用,号分隔的tag的,如:“经济,房产”
并且文章是有分类的,如经济类,娱乐类等(有个分类id字段),
tag表只有一个tag名字和被使用次数两个字段,如有8篇文章使用了经济这个标签:
tagname tagnum
经济 8
---------
问题是,取得某一分类文章的前10个热门标签,就是tagnum字段的数值最大的为热门标签。
如何写sql?好难,因为两个表没什么关系,只有标签有关系。
文章表有一个字段是存放用,号分隔的tag的,如:“经济,房产”
并且文章是有分类的,如经济类,娱乐类等(有个分类id字段),
tag表只有一个tag名字和被使用次数两个字段,如有8篇文章使用了经济这个标签:
tagname tagnum
经济 8
---------
问题是,取得某一分类文章的前10个热门标签,就是tagnum字段的数值最大的为热门标签。
如何写sql?好难,因为两个表没什么关系,只有标签有关系。
总之我想取得某个分类文章的前10个热门标签,好难
1.select a.tagname from tag a where (select count(*) from tag where tag<a.tagname)<=8
2.以逗号拆分文章表字段
create function dbo.fn_split
(
@inputstr varchar(8000), )
returns @temp table (a varchar(200))
as begin
declare @i int
declare @seprator varchar(10)
set @seprator =','
set @inputstr = rtrim(ltrim(@inputstr))
set @i = charindex(@seprator, @inputstr)while @i >= 1
begin
insert @temp values(left(@inputstr, @i - 1))set @inputstr = substring(@inputstr, @i + 1, len(@inputstr) - @i)
set @i = charindex(@seprator, @inputstr)
endif @inputstr <> '\'
insert @temp values(@inputstr)return
end
go
处理数据,
create table #(tag varchar(50))
declare @s varchar(300)
declare cur cursor for
select tag from 文章表
open cur
fetch cur into @s
while @@fetch_status>0
begin
insert into # select dbo.fn_split(@s)
fetch cur into @s
end
close cur
select top 10 * from
(
select tag,count(*) rnm from # group by tag
) order by rnm
drop table #
自己调一下,我这没环境
HTTP://www.ebigear.com/Fund/PlayNews.php?NewsID=29453&ID=285885
--------
出错FUNCTION mydb.charindex does not exist $SQL="select A.TagName from tag A,article B where B.artTag like '%A.TagName%' and B.cateid=2 order by A.TagNum desc limit 10;";
-----
没出错但什么都没显示 $SQL="select A.TagName from tag A left join article B on B.artTag like '%A.TagName%' where B.cateid=2 order by A.TagNum desc limit 10;";
--------
没出错但什么都没显示没办法了,怎么写这个like '%A.TagName%'?