从数据库中获取最高值
我正在使用以下查询从SQL数据库中获取交付类型,查询获取与购物车中的产品列表关联的所有交付类型。查询可以为一个产品返回至少两种交付类型,或者为购物车内的多个产品返回更多。不过,我只需要显示两个最昂贵的运输成本。从数据库中获取最高值
E.G. 产品1具有标准交付£9.99 2人交付£29.99 产品2具有标准交货£18.95和2人交付£39.99
我需要显示在屏幕上进行产品2.广告的投放类型我可以使用最大功能还是只会返回最高交货价格?
查询被用来:
<cfquery name="getDeliveryType" datasource="#application.dsn#">
SELECT
uid_pdelopt,
txt_pdelopt_type,
mon_pdelopt_cost,
uid_pdelopt_prodid,
txt_pdelopt_detail,
bit_pdelopt_active,
bit_pdelopt_selected,
uid_pdelopt_webid,
uid_pdelopt_typeid,
mon_pdelopt_actcost
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">)
</cfquery>
任何指针将不胜感激。
杰森
您可以通过成本DESC顺序和结果限制为2
<cfquery name="getDeliveryType" datasource="#application.dsn#">
SELECT TOP 2
uid_pdelopt,
txt_pdelopt_type,
mon_pdelopt_cost,
uid_pdelopt_prodid,
txt_pdelopt_detail,
bit_pdelopt_active,
bit_pdelopt_selected,
uid_pdelopt_webid,
uid_pdelopt_typeid,
mon_pdelopt_actcost
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">)
ORDER BY mon_pdelopt_cost DESC
</cfquery>
让我们试试这个,看看它的工作原理:
SELECT TOP 2
txt_pdelopt_type, MAX(mon_pdelopt_actcost) AS myCost, OTHER_FIELD
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="5,49" list="yes">)
GROUP BY uid_pdelopt_prodid, txt_pdelopt_type, OTHER_FIELD
ORDER BY myCost DESC
变化OTHER_FIELD与最终等领域你可能需要。
不确定''位应该在那里,我是否拿出来并留下括号。感谢您对此的帮助! – 2012-02-11 17:18:31
是的,对不起。移动''在查询结束时它属于 – 2012-02-11 17:23:07
嗨,现在产生72个结果 http://cfukstaging.jasoncongerton.co.uk/test.cfm我为结果设置了一个测试页面 – 2012-02-11 17:26:22
我的思想再次陷入困境!但是在SQL中允许LIMIT,因为我在返回的'LIMIT'错误附近得到了错误的语法。谢谢你快速的回复!! – 2012-02-11 15:38:57
我想替代方案是TOP,但是这会得到错误的结果! – 2012-02-11 15:40:45
如果你使用SQL Server,你需要改变它。 LIMIT在SQL Server中不起作用。尝试'SELECT TOP 2 uid_pdelopt,...'而不是 – 2012-02-11 15:41:32