2012-02-11 2 views
0

Я использую следующий запрос для получения типов доставки из базы данных SQL, запрос получает все типы доставки, связанные со списком продуктов в корзине покупок. Запрос может вернуть минимум два типа доставки для одного продукта или еще много для нескольких продуктов в корзине. Однако мне просто нужны две самые дорогие цены доставки.Получение наивысших значений из базы данных

E.G. Продукт 1 имеет Std Доставка £ 9,99 и 2 Человек доставки £ 29,99 Продукт 2 имеет Std Доставка £ 18,95 и 2 Человек Доставка £ 39,99

Мне нужно, чтобы отобразить на экране типы доставки для продукта 2. Могу ли я использовать max или будет только возвращать самую высокую цену доставки? используется

Запрос:

<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> 

Все указатели будут оценены.

Jason

ответ

1

Вы можете заказать по стоимости 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> 
+0

Еще раз мое мышление мешало! Однако LIMIT разрешен в SQL, так как я получаю неверный синтаксис около ошибки «LIMIT». Спасибо за ваш быстрый ответ!! –

+0

Я полагаю, что альтернатива TOP, но это приводит к неправильным результатам! –

+0

Если вы используете SQL Server, вам нужно это изменить. LIMIT не работает в SQL Server. Попробуйте 'SELECT TOP 2 uid_pdelopt, ...' вместо –

0

Давайте попробуем это, чтобы увидеть, если он работает:

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 с возможными другими полями вам может понадобиться.

+0

не уверен, что бит '' должен быть там, я беру его и оставляю скобки на месте. спасибо за вашу помощь! –

+0

Да, извините. Переместить '' в конце запроса, где он принадлежит –

+0

Привет, теперь это дает 72 результатов http://cfukstaging.jasoncongerton.co.uk/test.cfm Я создал страницу тестирования для результатов –

Смежные вопросы