4

1回の提出で複数の行を提出する方法について誰か助けてもらえますか?

このアンケート フォームには、テーブル スキルから派生した一連のスキルが表示されます。教師は生徒のスキルのチェックボックスをオンにして、[送信] をクリックする必要があります。

学生は複数のスキルを持つことができます。彼が 3 つのスキルを持っている場合、教師が送信ボタンをクリックすると、データベースに送信されるデータは 3 行になります。(表学生スキル)

<cfoutput query="skill">
<tr>
    <td>#skill.skillname#</td>
    <td align="center">:</td>
    <td><input type="checkbox" name="skillid" value="skillid" checked="checked"></td>
</tr>
</cfoutput>

テーブルスキル

+---------+------------+
| skillid | skillname  |

+---------+------------+

| 1       | draw       |

+---------+------------+

| 2       | read       |

+---------+------------+

| 3       | dance      |

+---------+------------+

テーブルの学生スキル

+----------+----------|

|studentid | skillid  |

+----------+----------+
| 001      | 1        |
| 001      | 2        |
| 002      | 1        |
| 002      | 2        |
| 002      | 3        |
+----------+----------+
4

2 に答える 2

5

SQL Server 2008 を使用していると仮定すると、次の構文を使用できるはずです。

INSERT INTO StudentSkill (StudentID, SkillID)
VALUES (100, 1), (100, 2), (100, 3)

このメソッドはhereから収集されました。これには、いくつかの代替メソッドも含まれています。

上記の SQL を構築するには、FORM.skillid 内の ID のリストを繰り返し処理する必要があります (フォームがそのように機能すると仮定します)。<CFQueryParam>また、 SQL を作成するときは必ず on 値を使用してください。以下のコードのようなことを行う必要があります。

<cfif ListLen(FORM.skillid)>
  <cfquery>
   INSERT INTO StudentSkill (StudentID, SkillID)
    VALUES
   <cfloop list="#form.skillid#" index="skill">
     (<cfqueryparam value="#form.studentID#" CFSQLType="CF_SQL_INTEGER">, 
       <cfqueryparam value="#skill#" CFSQLType="CF_SQL_INTEGER">)
   </cfloop>
  </cfquery>
</cfif>
于 2012-11-22T09:39:16.873 に答える
1

複数のレコードを挿入するためのもう1つの簡単な方法は、INSERT .. SELECTです。(これは、投稿されたリンクbanyrにも記載されています)。スキルIDは別のテーブルに保存されているため、それらにIN句を使用できSELECTます。studenSkill次に、ループせずに単純なクエリを使用して、 これらの値を他のテーブルに直接挿入します。

INSERT INTO studenSkill ( studenId, skillId )
SELECT <cfqueryparam value="#form.studentId#" cfsqltype="cf_sql_integer">
       , skillId
FROM   skill
WHERE  skillId IN 
       (
       <cfqueryparam value="#form.skillId#" cfsqltype="cf_sql_integer" list="true">
       )



    <input type="checkbox" name="skillid" value="skillid" checked="checked">

ところで、それがタイプミスでない場合は、クエリ列名の周りの#記号、つまり「skillid」を忘れないでください。

  <input type="checkbox" name="skillid" value="#skillid#" checked="checked">
于 2012-11-23T21:59:58.720 に答える