我正在学习数组和结构,并将购物车放在一起作为项目。我目前正在为购物车创建最近查看的产品模块。当用户查看产品时,我会将产品ID收集到一个数组中,
使用此信息查询我的数据库的最佳方法是什么,我的查询将是
<cfquery name="getRecent" datasource="#application.dsn#">
SELECT uid_product,txt_product_name
FROM tbl_products
</cfquery>
我想过将数组作为列表输出并使用IN运算符,但不确定这是否是正确的方法,看起来有点麻烦?我可以使用数组数据查询查询吗?如果是这样任何指针?
答案 0 :(得分:2)
如果您只维护productID列表,那么您不需要使用数组或结构,只需将它们存储为一个简单列表并按如下方式查询:
<cfset recentProducts = "4,5" />
<cfquery name="getRecent" datasource="#application.dsn#">
SELECT uid_product,txt_product_name
FROM tbl_products
where productID IN (<cfqueryparam cfsqltype="cf_sql_integer" value="#recentProducts#" list="true" />)
</cfquery>
答案 1 :(得分:1)
首先,除非你要在结构中加入额外的东西,否则我会说有一个结构只是为了保持ProductID似乎过多。我只是将带有productID的数组作为每个元素,没有结构。
所以你的数组的结构如下:
[
{ ProductID= 4 },
{ ProductID= 5 },
...
]
我建议你这样做:
[4,5]
这将使下一步更容易。现在我要说你必须遍历你的数组,将每个productID添加到一个列表中,然后你可以在查询中使用它。然后修改原始查询以使用该列表(记住并使用cfqueryparam)。
<cfset lstIDs = "">
<cfloop index="productStruct" array="#productsArray#">
<cfset lstIDs = listAppend(lstIDs, productStruct.ProductID)>
</cfloop>
<cfquery name="getRecent" datasource="#application.dsn#">
SELECT uid_product,txt_product_name
FROM tbl_products
WHERE productID IN <cfqueryparam value="#lstIDs#" cfsqltype="CF_SQL_INTEGER" list="yes">
</cfquery>
或者,如果您简化数组,只需执行ArrayToList即可实现相同的功能。
<cfquery name="getRecent" datasource="#application.dsn#">
SELECT uid_product,txt_product_name
FROM tbl_products
WHERE productID IN <cfqueryparam value="#ArrayToList(productsArray)#" cfsqltype="CF_SQL_INTEGER" list="yes">
</cfquery>