0

我希望我问这个问题是正确的。我正在使用 ColdFusion 10 并有一个名为companies. 在表中有一个名为 的字段stateList。它包含公司拥有商店的 state_ID 的逗号分隔列表。

我有一个搜索表单供用户选择一个州以查找该州的公司。我需要将它传递form.state_ID给搜索查询以查看是否companies.stateList包含form.state_ID

我尝试过的唯一返回任何结果的代码,但它们并非都是正确的结果,是

<cfquery name="searchCompanies" datasource="#businessDSN#">
  SELECT company_id, company_name, stateList
  FROM companies
  WHERE stateList LIKE "%#form.state_ID#"
</cfquery>

如果我搜索 Arizona, state_ID4,上述查询会返回任何在其stateList.

我想做的事可能吗?感谢您提供的任何帮助。

4

2 回答 2

6

...有一个名为 stateList 的字段。它包含一个以逗号分隔的 state_ID 列表...

天哪,为什么?如果可以,请立即将其更改为适当的关系表!

不过暂时...

<cfquery name="searchCompanies" datasource="#businessDSN#">
  SELECT company_id, company_name, stateList
  FROM companies
  WHERE CONCAT(',', stateList, ',') 
        LIKE
        CONCAT('%,', <cfqueryparam value="#form.state_ID#" cfsqltype="CF_SQL_VARCHAR">, ',%')
</cfquery>

并且,使用<cfqueryparam>而不是将未经检查的用户输入放入您的 SQL 字符串中。

于 2013-10-23T16:49:13.583 回答
2

如果您使用的是 MySQL,则可以使用FIND_IN_SET ...,例如:

<cfquery name="searchCompanies" datasource="#businessDSN#">
  SELECT company_id, company_name, stateList
  FROM companies
  WHERE FIND_IN_SET(<cfqueryparam value="#form.state_ID#" cfsqltype="CF_SQL_VARCHAR">,stateList)
</cfquery>

我不确定查询是否比 Tomalak 更快。

是的,规范化数据!!

于 2013-10-25T02:41:02.987 回答