[英]Coldfusion SQL Query Select and Update in one query
陷入以下问题。 我想在一个查询中执行SQL SELECT和UPDATE。 我已经开始工作了,但是没有得到结果。
这是我的示例代码:
<cfquery name="GetListings" datasource="#application.dsn#" result="get_data">
UPDATE listings AS t,
(
SELECT *
FROM listings
WHERE group = 92
) AS temp
SET t.premium_listing_count = t.premium_listing_count + 1 WHERE temp.id = t.id
</cfquery>
字段premium_listings_count会适当增加。
但是当我只想使用以下命令输出SELECT查询时:
<cfoutput query="GetListings">
#id#
</cfoutput>
我没有结果,实际上它甚至都不知道变量“ GetListings”
有任何想法吗?
您在这里只有一个UPDATE
查询,而没有SELECT
查询。 查询中的SELECT
语句被视为制作了另一个表,该表与t
一起使用了您使用的逗号。 该UPDATE
然后在这个表上来运行,但由于要加入listings
与改良版本listings
,你基本上是刚刚更新listings
,这就是为什么你的UPDATE
工作。 尽管UPDATE
仅修改行,而不返回数据,但您不应接收任何数据。
您没有指定要使用的数据库服务器。 在MS SQL Server中,这当然是可能的。 实际上,使用MS SQL Server时,您可以在cfquery标记内使用变量和条件逻辑执行相当于T-SQL程序的代码。
但是,您可以从执行的所有SQL中检索的唯一数据是单个结果集。 如果要使用多个结果集或将其他值传递回去,则必须使用cfstoredproc。
如果您使用的是MS SQL Server,以下代码将实现您想要的功能。 我确定您的数据库可以执行类似的操作。
<cfquery name="GetListings" datasource="#application.dsn#" result="get_data">
SELECT * FROM listings WHERE [group] = 92;
UPDATE listings
SET
premium_listing_count = premium_listing_count + 1
WHERE
[group] = 92;
</cfquery>
如果确实如此,您可以使用MS SQL Server中的单个语句来执行此操作。 例如,
<cfquery name="GetListings" datasource="#application.dsn#" result="get_data">
UPDATE listings
SET
premium_listing_count = premium_listing_count + 1
OUTPUT
deleted.*
WHERE
[group] = 92;
</cfquery>
组必须在查询中用括号括起来,因为它是SQL Server中的保留字。
编辑:
一旦我意识到您是专门询问MYSQL的,这就是您的问题的答案-
是的,您可以通过在CF数据源中的连接字符串中添加“ allowMultiQueries = true”来包含多个查询。 但是,我上面提到的其他所有内容仍然适用。 您只需要使用MYSQL语法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.