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

时间:2017-07-11 12:47:07

标签: mysql sql coldfusion

遇到以下问题。我想在一个查询中执行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'

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

此处您只有guard bodyA.categoryBitMask < 1 << 31 && bodyB.categoryBitMask < 1 << 31 else {return} if bodyA.categoryBitMask == 1 && bodyB.categoryBitMask == 3 || bodyA.categoryBitMask == 3 && bodyB.categoryBitMask == 1 { print("END GAME") player.categoryBitMask += 1<<31 if let dieexplostionNode = SKEmitterNode(fileNamed: "Explosion.sks"){ dieexplostionNode.targetNode = self dieexplostionNode.position = player.position // add 3 actions let wait = SKAction.wait(forDuration: 1.1) let addExplosion = SKAction.run { self.player.addChild(dieexplostionNode) self.player.alpha = 0 } let removePlayer = SKAction.run { self.player.removeFromParent() self.player.removeAllActions() dieexplostionNode.removeFromParent() } // put them in a sequence. let seq = SKAction.sequence([addExplosion,wait,removePlayer]) // run the sequence self.run(seq) } 个查询,而不是UPDATE。查询中的SELECT语句被视为使用您使用的逗号创建另一个与SELECT连接的表。然后,t会在此已加入的表格上运行,但由于您要加入UPDATE精简版listings,因此您实际上只是更新listings,这就是您{ {1}}正在运作。您不应该接收任何数据,因为listings只修改行,而不是返回数据。

答案 1 :(得分:0)

您没有指定您正在使用的数据库服务器。这在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,这就是你问题的答案 -

是的,你可以通过添加&#34; allowMultiQueries = true&#34;来包含多个查询。到CF数据源中的连接字符串。但是,我上面提到的其他一切仍然适用。您只需使用MYSQL语法。