繁体   English   中英

Coldfusion SQL查询在一个查询中选择和更新

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM