0

我有下表

search_redirect
sr_id | sr_keyword | sr_redirect | sr_synonyms
------------------------------------------------------
1     | chair      | www.url.com | recliner,seat,stool
2     | couch      | www.url.com | sofa,divan
3     | dresser    | www.url.com | chest,drawers

当有人在我的网站上使用搜索功能时,我希望能够将他们搜索的内容与同义词列表进行比较。我对解决方案的尝试是这样的:

SELECT sr_redirect
FROM search_redirect
WHERE '#url.q#' IN (sr_redirect)

不幸的是,虽然这是一个完全合法的举动,但它并没有像我想象的那样做。我的下一次尝试是尝试在 中的值中添加单引号sr_synonyms,但这也没有产生成功的结果。这个问题很难说,所以我无法在这种情况下找到任何帮助。任何我能得到的建议将不胜感激。我在 SQL Server 2008 中使用 ColdFusion 9 服务器端脚本。

4

3 回答 3

0

为了维护一个纯 sql 解决方案,我会将您的表更改为 2 个表。

第一个可能有:

搜索重定向

sr_id | sr_keyword | sr_redirect

第二个可能有

search_keyword_to_synonym

sr_id | sr_同义词

然后在第二个表中每行只有 1 个同义词。您的解决方案可能是:

SELECT sr_redirect FROM search_redirect
INNER JOIN search_keyword_to_synonym
ON search_redirect.sr_id=search_keyword_to_synonym.sr_id
WHERE search_redirect.sr_keyword=whatever_input_you_have.
于 2012-08-31T19:59:03.843 回答
0

首先:

如果您想单独访问它们,切勿将多个信息放入一个字段中。绝不

也就是说,这很容易纠正:创建一个表“同义词”,如

synonym | sr_id
---------------
recliner| 1
seat    | 1
stool   | 1
sofa    | 2
divan   | 2

并完成它。

于 2012-08-31T20:02:15.167 回答
0

您可以使用与此类似的语法:

SELECT sr_redirect
FROM search_redirect
WHERE substr('#url.q#',sr_synonyms) > 0

但是,我同意其他人的看法-重新规范化

于 2012-08-31T20:03:31.987 回答