谁能帮我如何在一次提交中提交多行?
此调查表单将显示一组派生自表格技能的技能。教师必须选中学生的技能复选框,然后单击提交。
一个学生可以拥有多项技能。如果他有 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 |
+----------+----------+
假设您使用的是 SQL Server 2008,您应该能够使用以下语法:
INSERT INTO StudentSkill (StudentID, SkillID)
VALUES (100, 1), (100, 2), (100, 3)
这种方法是从这里收集的,其中还包含几种替代方法。
你只需要遍历FORM.skillid中的ID列表(假设这就是你的表单的工作方式)来构建上面的SQL。此外,请确保在构建 SQL 时对值使用<CFQueryParam>
。类似于下面的代码应该做的事情:
<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>
插入多条记录的另一种简单方法是INSERT .. SELECT
。(在发布的链接中也提到了它)。由于技能 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">