我以为我破了这个但是它返回了许多结果。我会尝试更好地解释这一点。
我有一张表格,其中包含产品的交货类型(即One Man Delivery,Two Man Delivery)信息。交付成本因产品而异,每种产品可能有多种交付类型。
如果用户将两个产品添加到购物车,我需要从购物车中的任一产品中显示最昂贵的交付选项。
EG。
Product 1
id=2
Delivery Type=One Man delivery
Cost=**£30**
id=2
Delivery Type=Two Man delivery
Cost=£40
Product 2
id=4
Delivery Type=One Man delivery
Cost=£40
id=4
Delivery Type=Two Man delivery
Cost=**£60**
The results should be;
id=4
Delivery Type=Two Man delivery
Cost=**£60**
id=2
Delivery Type=One Man delivery
Cost=**£30**
我还需要获得表格的uid
。这会阻止查询获得正确的结果。它将返回所有交付类型。如果我删除uid
,则会显示正确的结果。它似乎阻止了这个群体。
<cfquery name="getDeliveryType" datasource="#application.dsn#">
SELECT txt_pdelopt_type, MAX(mon_pdelopt_actcost) AS myCost, uid_pdelopt
FROM dbo.tbl_product_deliveryopt
WHERE bit_pdelopt_active=<cfqueryparam cfsqltype="cf_sql_bit" value="yes">
AND uid_pdelopt_prodid IN (<cfqueryparam cfsqltype="cf_sql_integer" value="4,5" list="yes">)
GROUP BY txt_pdelopt_type, uid_pdelopt
ORDER BY myCost DESC
</cfquery>
最好的方法是什么?任何帮助表示赞赏。
我想我卖了一个假人!如果我有两个产品具有相同的交付选项和成本,我会收到所有交付类型,因为没有任何成本比每个都大?
现在已经很晚了,我很困惑自己,更别说你们想要帮忙了!
所以我不确定我要做的是如何实现我的需要!
让我们从头开始尝试;
表:tbl_product_deliveryopt
UID:uid_pdelopt
产品编号:uid_pdelopt_prodid
交货类型:txt_pdelopt_type
费用:mon_pdelopt_actcost
此表包含与产品相关的交付类型。产品uid为uid_products
。
每种产品都有多种交付方式,例如One Man Delivery,Two Man Delivery。
每种交付类型可能会有不同的成本,具体取决于产品的大小。
如果购物车中添加了两个产品,我首先需要找到最差的送货费用,然后显示我们找到的最高费用以及其他选项,这些选项共享我们找到的最高费用uid_pdelopt_prodid
。
EG:
产品1
德尔类型:一个人
费用:20英镑
产品:3
产品1
德尔类型:两个人
费用:40英镑
产品:3
产品2
德尔类型:一个人
费用:10英镑
产品:4
产品2
德尔类型:两个人
费用:20英镑
产品:4
由于产品1的运费最高,我需要显示产品1的运费。
但是,有两种产品可能会收取相同的运费,在这种情况下,我仍然只需要显示一组选项,但它们必须具有相同的uid_pdelopt_prodid
。
换句话说,我无法通过uid_pdelopt_prodid
显示他们需要关联的选项的混合。
这能解释得更好吗?
答案 0 :(得分:0)
您需要分组并汇总费用以获得每种情况的总费用。然后按总和排序。第一行将是最大的一行。
另一种选择是使用'having子句'允许你对总和做条件,如sum。
你会说 ... 按x分组 总和(y)= max(y)
答案 1 :(得分:0)
检索uid会使GROUP BY
中断,因为它是唯一的,如果按唯一字段分组,则每一行都属于它自己的组。
我对你的表格结构以及哪些字段意味着什么不是100%肯定,但是这样的事情怎么样?
SELECT pdo.uid_pdelopt, pdo.txt_pdelopt_type, pdo.mon_pdelopt_actcost
FROM dbo.tbl_product_deliveryopt pdo
INNER JOIN (
SELECT txt_pdelopt_type
, uid_pdelopt_prodid
, MAX(mon_pdelopt_actcost) AS max_cost
FROM dbo.tbl_product_deliveryopt
WHERE bit_pdelopt_active = <cfqueryparam cfsqltype="cf_sql_bit" value="yes">
AND uid_pdelopt_prodid IN
(
<cfqueryparam cfsqltype="cf_sql_integer" value="#arguments.uid_pdelopt_prodid#" list="yes">
)
GROUP BY txt_pdelopt_type, uid_pdelopt_prodid
)
pdo_max ON (pdo_max.txt_pdelopt_type = pdo.txt_pdelopt_type
AND pdo_max.max_cost = pdo.mon_pdelopt_actcost
AND pdo_max.uid_pdelopt_prodid = pdo.uid_pdelopt_prodid)
WHERE pdo.bit_pdelopt_active = <cfqueryparam cfsqltype="cf_sql_bit" value="yes">
AND pdo.uid_pdelopt_prodid IN
(
<cfqueryparam cfsqltype="cf_sql_integer" value="#arguments.uid_pdelopt_prodid#" list="yes">
)
ORDER BY pdo.mon_pdelopt_actcost DESC
内联视图(内部查询)返回每uid_pdelopt_prodid
和txt_pdelopt_type
的最高费用。然后将其加入到原始表中,以过滤到仅具有该最大成本的行。允许您撤回uid_pdelopt
。