0

我目前正在处理一个查询,该查询从用户添加的手推车中取出所有物品。下面的代码演示了我想要实现的目标,我将所有的手推车物品合计起来,并将每个物品的成本 + 数量相乘并将它们相加。我还希望能够从此查询中调出沼泽标准列名。除了创建 3 个查询之外,我不太确定如何做到这一点,一个用于手推车本身,一个用于用户的物品总量,一个用于用户的总成本,但可以肯定的是,这一切都可以完成在一个查询中对吗?

<cfquery datasoure="#application.datasource#" name="trolley">
    Select *, IsNull(Sum(trolley_amount), 0) As trolly_items, IsNull(Sum(trolley_cost * trolley_amount), 0) As trolley_totalcost
    From trolley
</cfquery>
4

2 回答 2

1

我会给你一个冷融合的答案。您可以在对数据库的一个查询和一个查询查询的 1 个或 2 个查询中执行此操作。这将“看起来像”您的代码中的 2 或 3 个查询,但实际上它将是 1 个查询(访问数据库)和 2 个“数组过滤或聚合”操作。简而言之,它看起来像这样:

<cfquery name="myTrolley" datasource="myDSN">
SELECT  Item, quantity, cost, quantity * cost AS totalItemCost
FROM    trolley
WHERE   userID = <cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#userid#"/>

<cfquery name="itemTotals" dbtype="query">
    SELECT SUM(totalItemCost) AS grandTotal
    FROMY   myTrolley
</cfquery>

当然,您的实际查询会有所不同,但如果您的目标是减少数据库的流量(一个值得称赞的目标,有时可以获得红利),那么这可能是要走的路。Q of a Q 对于这类事情非常精简和高效——当然,当你试图变得过于复杂时,它确实会崩溃。

于 2013-08-16T21:21:37.717 回答
-1

正如亚当所说,这是一个 SQL 问题。

从问题中,我认为您想在手推车中获取物品,总成本和所购买物品的总数(总金额)。

根据我的经验和少量挖掘,您无法在一条 SQL 语句中完成所有这些操作。相反,您需要两个语句。首先将物品放入手推车中,第二个将结合总成本和总金额,就像您在问题中的 SQL 中所做的那样,因为它们都是聚合函数

所以*在你的 SQL 中删除它并创建一个新的 SQL。

于 2013-08-16T19:45:32.383 回答