0

この質問が正しいことを願っています。ColdFusion 10 を使用しており、mySQL テーブルの名前はcompanies. テーブルには という名前のフィールドがありますstateList。これには、会社が店舗を持つ州 ID のコンマ区切りのリストが含まれています。

ユーザーが州を選択してその州の会社を見つけるための検索フォームがあります。が含まれているform.state_IDかどうかを確認するには、それを検索クエリに渡す必要があります。 companies.stateListform.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 を検索した場合、上記のクエリは 4、14、24、34、および 44 を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>

また、チェックされていないユーザー入力を SQL 文字列にドロップする代わりに使用してください。<cfqueryparam>

于 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 に答える