首先,pankaj 是什么意思。
你可以做这样的事情。假设我正在存储汽车的优先方面。1997年本田雅阁。您可能会像这样存储有关它的数据。
汽车表
CarID (PrimKey) | Make | Model | Year
--------------------------------------------
47 | Honda | Accord | 1997
48 | Chevy | Malibu | 2005
然后我可以有一个名为 CarSpecs 的单独表
SpecID (PrimKey) | CarID | SpecName | SpecValue
-----------------------------------------------
1001 | 47 | Color | Red
1002 | 47 | Transmsn | Auto
1003 | 47 | Doors | 4
1004 | 48 | Color | Green
1005 | 48 | Transmsn | Manual
您也可以在此表中存储(品牌、型号、年份),但假设您没有。
你的插入变成了这样的东西..
(如果您不使用cfqueryparam,请查一下,它可以防止 sql 注入,这是一种常见的黑客攻击形式。)
<cfquery name="NewCar">
insert into Cars(Make, Model, Year)
values(<cfqueryparam value="#form.make#" cfsqltype="cf_sql_varchar">,
<cfqueryparam value="#form.model#" cfsqltype="cf_sql_varchar">,
<cfqueryparam value="#form.year#" cfsqltype="cf_sql_integer">)
</cfquery>
<cfset DeletedFields = "make,model,year,submit_button,tos_agree">
<cfloop list="#form.fieldnames#" index="df">
<cfif not listfind(deletedfields,df)>
<cfquery>
insert into CarSpecs(CarID,SpecName,SpecValue)
values(<cfqueryparam cfsqltype="cf_sql_integer" value="#NewCar.generatedKey#">,
<cfqueryparam cfsqltype="cf_sql_varchar" value="#fn#">,
<cfqueryparam cfsqltype="cf_sql_varchar" value="#form[fn]#">)
</cfquery>
</cfif>
</cfloop>
有一些简单的方法可以获取您刚刚插入的记录的 id ( #NewCar.generatedkey#
)。如果您不熟悉,这里有一篇简短的文章。
现在,正如我们在您上一个问题的评论中所介绍的那样
正如我所演示的那样,最好的方法是插入单独的行。之后,单独的列会比作为批量插入要好。
作为批量插入的唯一好处是它很容易,就是这样。
然而,缺点是很多的。
要选择任何数据,您必须
- 选择所有数据。- 不必要的开销
- 尝试使用 sql 解析数据 - 不必要的开销
基于此字段的表间查询(连接)将是一个非常令人头疼的问题。
所以假设你设计了类似我上面例子的东西。您可以为这样的汽车选择所有详细信息。
<cfoutput query="CarDetails" group="carID">#Make# #Model# #Year#<br /><br />
<cfoutput>#replace(specname,"_"," ","ALL")#: <input type="text" name="#specname#" value="#htmleditformat(specvalue)#" /> <br /></cfoutput>
</cfoutput>