не могу поучлить SUM()

slip

Guest
не могу поучлить SUM()

Почему то не могу получить поле SUM() в запросе:

PHP:
$query = "select *, SUM(sklad.kolvo) AS total FROM users_data, zakaz, sklad WHERE users_data.user = zakaz.username AND zakaz.id = sklad.id_sklad AND users_data.user_id = '$client' AND sklad.kolvo IS NOT NULL GROUP BY zakaz.id";
когда вызываю $row['total'] ничего не считает, почему? и еще почему GROUP BY обязательная при использовании SUM() в таких запросах? спасибо.

-~{}~ 28.06.05 16:28:

..или просто SUM(kolvo) ...в таблице склад, я так и не понял как правильно будет...так же не уверен правильно ли писать SELECT *, [blah blah]..
 

Vital_N

Новичок
если у тебя есть группировка - то выбирать ты можешь только поля по котрым идет группровка либо поля на которые накладываешь агрегатные функции типа sum, avg и т.д.
 

slip

Guest
то есть либо либо? sum() мне нужно сделать отдельным запросом тогда? или как?
 

mani13

Новичок
slip, пробовал запускать запрос из консоли?
и что говорит echo mysql_error()?
 

Vital_N

Новичок
slip
не либо либо а можно выбирать поля по котрым идет группровка плюс поля на которые накладываешь агрегатные функции типа sum
 

slip

Guest
так что не верного тогда в моем запросе? =)
из консоли нет, mysql_error() не выдает ошибки, он выполняет запрос но просто не считает SUM()
 

MD

Guest
"поля по котрым идет группровка плюс поля на которые накладываешь агрегатные функции типа sum "

в твоем запросе группировка по ИД, сум на КОЛВО, а выбираешь ты * - т.е. всё. теперь понятно?
 

Vital_N

Новичок
slip
* - ты считаешь - что это поля по которым идет группировка?
 

mani13

Новичок
Vital_N, контрольный вопрос:
есть pole1 int, pole2 varchar, pole3 varchar в таблице test(например)
что вернёт запрос
[sql]select *, sum(pole1) from test group by pole3[/sql]
?
разрешаю даже создать такую таблицу и попробовать :)
 

chira

Новичок
slip
MySQL какой версии для 4.1 можно сделать с подзапросом ...
 

slip

Guest
Vital_N
групировака идет по полю скажем "pole3", а * - мы выбираем все таблицы, почему нет если мы выбрали все таблицы?
 

MD

Guest
почитай еще раз пост весь сначала. подумай много. :)
 

mani13

Новичок
Vital_N
не поверишь - пробовал :)

Vital_N
MD
кстати, а как вы прокомментируете это:
[sql]mysql> SELECT order.custid,customer.name,MAX(payments)
FROM order,customer
WHERE order.custid = customer.custid
GROUP BY order.custid;[/sql]
взято отсюда: http://dev.mysql.com/doc/mysql/ru/group-by-functions.html

slip
покажи describe sklad
 

MD

Guest
mani13, " Это - справочное руководство по MySQL; оно представляет собой документацию по MySQL версии 5.0.6-beta." этим и обьясним. достаточно? :)
 

Vital_N

Новичок
mani13
ты там внимательно почитай (жалко что они не указывают версию с которой такая возможность появилась )))
-----
В MySQL расширены возможности использования оператора GROUP BY. Теперь в выражениях SELECT можно использовать столбцы или вычисления, которые не присутствуют в части GROUP BY. Это справедливо для любой возможной величины для этой группы. Данная возможность позволяет повысить производительность за счет исключения сортировки и группирования ненужных величин. Например, в следующем запросе нет необходимости в группировке customer.name:

mysql> SELECT order.custid,customer.name,MAX(payments)
FROM order,customer
WHERE order.custid = customer.custid
GROUP BY order.custid;

В ANSI SQL к предложению GROUP BY необходимо добавлять customer.name. В MySQL, если работа происходит не в режиме ANSI, это имя избыточно.

Не используйте данное свойство, если столбцы, пропущенные в части GROUP BY, не являются уникальными в данной группе! Возможны непредсказуемые результаты.
 

slip

Guest
переходим на 5e. версию...:) Синтаксис DESCRIBE :

{DESCRIBE | DESC} tbl_name {col_name | wild}

в моем запросе это поулчается, так?

PHP:
$query = "select *, DESCRIBE | DESC sklad kolvo | wild ..
чего то запутался...

-~{}~ 28.06.05 17:58:

ам...нет $query = "select *, DESC sum(sklad ) . ???
 

chira

Новичок
slip
можешь описать простым языком, какие данные нужно получить ...
посмотри на результат селекта:
Код:
select * 
FROM users_data
 , zakaz
 , sklad 
 , (select sklad.id_sklad, SUM(sklad.kolvo) AS total FROM sklad GROUP BY sklad.id_sklad) sum_sklad
WHERE users_data.user = zakaz.username
 AND zakaz.id = sklad.id_sklad
 AND zakaz.id = sum_sklad.id_sklad
 AND users_data.user_id = '$client'
 AND sklad.kolvo IS NOT NULL
 

mani13

Новичок
MD
Vital_N
хы-хы, ну лан... тогда:
http://www.mysql.ru/docs/man/Group_by_functions.html
там, кстати, "Это - справочное руководство по MySQL; оно представляет собой документацию по MySQL версии 4.0.10-gamma."
хы-хы :)
хорошая у меня 5.x:
mysql> select version();
+------------+
| version() |
+------------+
| 4.1.12-log |
+------------+

chira, мм, фитча, а я-то думал :) спс, буду знать на будующее...

хотя мне всё-таки кажется, что с типом kolvo что-то не то... либо там действительно 0 :)
p.s.: ну кто-нить отрежьте эти бредни :)
 
Сверху