2013-08-16 5 views
0

В настоящее время я работаю над запросом, который вытаскивает все элементы из тележки, добавленной пользователем. Нижеприведенный код демонстрирует то, чего я пытаюсь достичь, когда я беру все элементы тележки и суммирую количество, а также умножаю стоимость + количество каждого элемента на eachother и суммируя их. Я также хочу, чтобы иметь возможность вызывать стандартные столбцы столбцов из этого запроса. Я не слишком уверен в том, как я могу это сделать, кроме создания 3 запросов, один для самой тележки, один для общего количества элементов для пользователя и один для общей стоимости пользователя, однако, безусловно, все это можно сделать в одном запросе?SQL множественные псевдонимы рядом с запросом

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

Можете ли вы предоставить некоторые примеры данных и результаты, которые вы хотите? Кроме того, что такое «имена столбцов стандартного болота»? –

+0

Означает, что вы ожидаете в таблице троллейбусов, ссылки на продукт, размеры и т. Д. И это не данные, которые беспокоились о том, как вы идете об определении нескольких псевдонимов в одном запросе. Остальное в настоящее время не имеет значения. – Banny

+0

Помимо этого, вызываемого с тегом CFQUERY, вопрос имеет отношение к ColdFusion? Звучит как вопрос SQL для меня ..? –

ответ

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 Q довольно тощий и эффективный для такого рода вещей - хотя, конечно, он сломается, когда вы пытаетесь с ним усложниться.

+1

Другим способом сделать это, возможно, быстрее, но менее интуитивно понятным является ArraySum (myTrolley ["TotalItemCost"]) –

+0

Мне нравится этот ответ, очень продуктивный и информативный. И да, я согласен, единственное, что я хочу сделать в этом проекте, - это уменьшить количество, которое я делаю при вызове базы данных. Я никогда не знал, что вы можете запускать запросы запросов, поэтому это очень полезно. – Banny

-1

Как сказал Адам, это вопрос SQL.

В связи с этим я считаю, что вы хотите получить предметы в тележке, общую стоимость и общее количество (общую сумму) предметов, которые вы покупаете.

Из моего опыта и небольшого рытья вы не можете сделать все это в одном выражении SQL. Скорее, вам нужны два утверждения. Сначала, чтобы получить предметы в тележке, а вторая объединит общую стоимость и общую сумму, как и в SQL в вашем вопросе, потому что они оба являются совокупными функциями.

Так что удалите это * в своем SQL и создайте новый SQL.

+0

@ Вы не возражаете, признав тот факт, что мой ответ полезен, подняв голос? Благодарю. – yomexzo

+0

Просить голоса очень недостойно. Я проиграл соответственно. –

+0

@ DanBracuk как серьезно? Вы могли бы подумать об этом так, но я не хочу, чтобы я голосовал, чтобы я мог внести свой вклад. Кто голосует за правильный ответ. smh – yomexzo