如何在包含值列表的数据库字段中搜索值?

0 mysql coldfusion coldfusion-10

我希望我能正确地提出这个问题.我正在使用ColdFusion 10并且有一个名为mySQL的表companies.在表中有一个名为的字段stateList.它包含逗号分隔的state_IDs列表,其中公司有商店.

我有一个搜索表单供用户选择状态来查找该州的公司.我需要将其传递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>
Run Code Online (Sandbox Code Playgroud)

如果我搜索亚利桑那州,state_ID4,上面的查询返回任何公司,其中有4,14,24,34和44 stateList.

我想做什么?感谢您提供的任何帮助.

Tom*_*lak 5

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

天啊,为什么?如果可以,请立即将其更改为正确的关系表!

但暂时......

<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>
Run Code Online (Sandbox Code Playgroud)

并且,使用<cfqueryparam>而不是将未经检查的用户输入删除到SQL字符串中.

  • +100.同样重组.正如您所发现的那样,查询列表很尴尬,更不用说缓慢且容易出错.因为您必须求助于字符串比较,即使单个空格差异也会导致查询返回不正确的结果.更健壮的结构是将关系存储在单独的表中:CompanyState列:Company_id,State_id. (2认同)