sql server 08R2 需要实现一个根据历史访问记录的关键字搜索出带相同关键字的课程(类似智能推荐),可是现在关键字是多个关键字存在一个字段的

Gold_1010 2016-08-17 09:10:35
如题,需要实现一个根据历史访问记录的关键字搜索出带相同关键字的课程(类似智能推荐),可是现在关键字是多个关键字存在一个字段里的。匹配的话不能单纯的like来做where了。
...全文
99 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Gold_1010 2016-08-17
  • 打赏
  • 举报
回复
引用 6 楼 roy_88 的回复:
这样会造成一个课程满足多个关健词的情况 这里用语句举个例
;WITH CTEWT
AS
(
SELECT a.KCID,SUBSTRING(a.Words,b.number,CHARINDEX(' ',a.Words+' ',b.number)-b.number) AS Words
FROM WordsTab AS a 
INNER JOIN master.dbo.spt_values AS b ON b.type='P' AND b.number>=0 AND CHARINDEX(' ',' '+a.Words,b.number)=b.number
)
SELECT * FROM CTEWT  AS a INNER JOIN Course AS b ON b.Title LIKE '%'+a.Words+'%'
谢谢版主,我研究研究,数据库这块没有学的太精
中国风 2016-08-17
  • 打赏
  • 举报
回复
这样会造成一个课程满足多个关健词的情况 这里用语句举个例
;WITH CTEWT
AS
(
SELECT a.KCID,SUBSTRING(a.Words,b.number,CHARINDEX(' ',a.Words+' ',b.number)-b.number) AS Words
FROM WordsTab AS a 
INNER JOIN master.dbo.spt_values AS b ON b.type='P' AND b.number>=0 AND CHARINDEX(' ',' '+a.Words,b.number)=b.number
)
SELECT * FROM CTEWT  AS a INNER JOIN Course AS b ON b.Title LIKE '%'+a.Words+'%'
中国风 2016-08-17
  • 打赏
  • 举报
回复
如果是这样可尝试用全文检索 用语句只能拆分再查找效率低
Gold_1010 2016-08-17
  • 打赏
  • 举报
回复
引用 2 楼 roy_88 的回复:
SELECT * FROM WordsTab  AS a INNER JOIN Course AS b ON b.Title LIKE '%'+REPLACE(a.Words,' ','_')+'%'
谢谢,我看一下。 我自己写了一个 但是感觉查询很多,不过我只搜6条数据,应该也可以。 我试试你的这个
Gold_1010 2016-08-17
  • 打赏
  • 举报
回复
引用 1 楼 qaz595150622 的回复:
是含一个关键字就查出来 还是含有所有关键字才能查出来 有点歧义
就是上表中有一个words字段中存了三个关键字,比如 压力 管理 心态 三个关键字中间是空格隔开的。我要搜出所有带压力或者所有带管理或者所有带心态的课程。
中国风 2016-08-17
  • 打赏
  • 举报
回复
SELECT * FROM WordsTab  AS a INNER JOIN Course AS b ON b.Title LIKE '%'+REPLACE(a.Words,' ','_')+'%'
一百零七 2016-08-17
  • 打赏
  • 举报
回复
是含一个关键字就查出来 还是含有所有关键字才能查出来 有点歧义

22,207

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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