在数据库表中查找值多值列

时间:2012-08-31 19:56:07

标签: sql sql-server-2008 coldfusion coldfusion-9 multivalue

我有下表

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服务器端脚本。

3 个答案:

答案 0 :(得分:0)

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

第一个可能有:

search_redirect

sr_id | sr_keyword | sr_redirect

第二个可以

search_keyword_to_synonym

sr_id | sr_synonym

然后第二个表中每行只有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.

答案 1 :(得分:0)

首先:

如果您想单独访问这些信息,请永远不要将多个信息放入一个字段中。从未

尽管如此,这很容易纠正:创建一个表“同义词”,如

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

并完成它。

答案 2 :(得分:0)

你可以使用类似的语法:

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

我同意其他人 - 重新正常化