2016-07-04 10 views
0

私は皆、次のことに少しだけ気をつけています。MySQL HTML形式のレコードを取得するためのクエリ

私はチェックボックス付きのHTMLフォームを持っています。

<input type="checkbox" name="colors" value="1"/>1 brown<br> 
<input type="checkbox" name="colors" value="2"/>2 blue<br> 
<input type="checkbox" name="colors" value="3"/>3 green<br> 
<input type="checkbox" name="colors" value="4"/>4 red<br> 
<input type="checkbox" name="colors" value="5"/>5 yellow<br> 

私は以下のようにMySQLのテーブルを持っている:

|id|colorids| 
+--+--------+ 
|1 |4  | 
|2 |2  | 
|3 |3,1  | 
|4 |1  | 
|5 |2,3  | 
|6 |5  | 

colorids TYPE VARCHAR 

私はボックス「1ブラウン」を選択すると、私は結果ID 4を取得する必要があり、これは問題ありません。またはボックス '1ブラウン'と '5黄色'、私はID 4とID 6も、問題はありません。

しかし、ときに私はボックス '2ブルー' と '3緑' と '5黄色い' 私が望む取得結果を選択:ID 2、ID 3、ID 5、ID 6

今、このIドン方法は分かりません。

coloridsに1つの値がある場合、このクエリは正常に動作します。

<cfquery name="qGetColors" datasource="#application.dsn#"> 
      SELECT * 
      FROM 
        colors 
      WHERE   
        colorids IN (#form.colors#); 
    </cfquery> 

何クエリ私は、複数の選択ボックスやデcoloridsの列に複数の値があるときに、私が欲しいものを得るために使うべきでしょうか?

「find_in_set」で何かを使用する必要がありますか?もしそうなら、クエリはフォームリスト 'colors'とどのようになるでしょうか?

多くのご協力ありがとうございました。 ColdFusionを使用していますが、クエリが問題です。

+4

SQLインジェクションを防ぐことができます元のテーブルにあなたのIDにother_idリンクすることができます。 –

+1

データベースが "リスト"で動作するように設計されていないため、クエリを理解するのが難しい理由があります。これらは、データのセット(または行)を処理するように設計されています。あなたは技術的に[find_in_set'のようなハックを使うことができますが(http://stackoverflow.com/questions/25437697/sql-query-multiple-tables-with-multiple-joins-and-column-field-with-comma-seper/25437961#25437961) - しないでください。それらは、適切なテーブル構造を作成するための貧弱な代替品です。代わりに、テーブルを正規化すると、このようなクエリは簡単になります。 – Leigh

+0

こんにちは、あなたの提案に感謝!心から感謝する。私のデータベースの知識はあまり良くないと思います。どのように私は私が欲しいものを達成するためにデータベースを正常化する必要があります上の任意の提案? – MrSoolmaan

答えて

0

@Matt Buscheが言ったように、あなたはこのような別のテーブルを望んでいます。

|id|other_id|colorids| 
+--+--------+--------+ 
|1 |1  |4 
|2 |2  |2 
|3 |3  |3 
|4 |3  |1 
|5 |4  |1 
|6 |5  |2 
|7 |5  |3 
|8 |6  |5 

は、あなたは簡単にselect other_id where colourids IN (<CFQUERYPARAM VALUE="#form.colors#" CFSQLTYPE="CF_SQL_INTEGER" LIST="YES">)

でcfqueryparamを使用すると、各IDとcoloridを持つテーブルを持っているあなたのデータベースを正規化する必要があり

関連する問題