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

slip

Guest
chira
Нужно получить все данные которые выводятся в запросе:

$query = "select * 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";

+ сумма полей sklad.kolvo

щас попробую, я еще не пользовался такой структурой...
 

Vital_N

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

slip

Guest
chira
а что значит поле sum_sklad в твоем запросе и откуда оно берется?

и расскажите плиз про DESC хочется знать два варианта...
 

chira

Новичок
slip
данные из таблицы sklad тебе тоже нужны или хватить только суммы?
если
zakaz.id - PRIMARY KEY
sklad.id_sklad - REFERENCE zakaz (id)
to
с формой GROUP BY zakaz.id , ты не получишь все данные из таблицы sklad, а только первые попавшиеся

-~{}~ 28.06.05 17:21:

sum_sklad - это алиас для подзапроса ...

-~{}~ 28.06.05 17:25:

про DESC ничего не понял, дай ссылку ...
 

slip

Guest
мне нужны данные и сумма..

Да ты прав на счет
zakaz.id - PRIMARY KEY
sklad.id_sklad - REFERENCE zakaz (id)

тогда GROUP BY что? sklad.id_sklad ?

-~{}~ 28.06.05 18:26:

mani13 на предыдущей странице писал .."Покажи DESC".. вот тоже интересно, если mysql ниже чем 4,1 то получается мы обрабатываем такой запрос через DESC?

-~{}~ 28.06.05 18:29:

еще если я пробую твой запрос то он так же не пишет сумму плюс выводит одни и те же данные по несколько раз...
 

mani13

Новичок
slip
describe sklad;
выведет структуру таблицы sklad
мне почему-то кажется, что sklad.kolvo не numeric типа, отсюда и 0
 

slip

Guest
а дальше? зачем мне структура sklad'а?
sklad.kolvo varchar если ты об этом..
 

chira

Новичок
slip
еще если я пробую твой запрос то он так же не пишет сумму плюс выводит одни и те же данные по несколько раз...
ищи поле total ...
согласно привидённому SQL нескольким строкам в таблице sklad соответствуют данные из таблиц users_data, zakaz поэтому они повторяются.
Ещё раз вопрос: действительно нужны все данные из таблицы sklad или хватит суммарного количества?
 

slip

Guest
mani13
а что?

chira
так вывод поля тотал я и вывожу в

<? echo $row['total']; ?>

эффект тот же..

Да согласен, а что же делать что бы не повторялись, потому что если повторяются то структура уже не та, потому что не должны...

-~{}~ 28.06.05 18:42:

Да, нужны данные из sklad и сумма
 

chira

Новичок
slip
я всё к тому спрашиваю, что для приведённого тобой SQL-а смысла в данных из таблицы sklad нет ...
такой запрос тебе не подойдёт?
Код:
select * 
FROM users_data
 , zakaz
 , (select sklad.id_sklad, SUM(sklad.kolvo) AS total FROM sklad WHERE sklad.kolvo IS NOT NULL GROUP BY sklad.id_sklad) sum_sklad
WHERE users_data.user = zakaz.username
 AND zakaz.id = sum_sklad.id_sklad
 AND users_data.user_id = '$client'
-~{}~ 28.06.05 18:05:

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

slip

Guest
блин, не работает не первый не второй вариант, он не выводит ни сумму (вывожу через total) ни поля sklad.kolvo

-~{}~ 28.06.05 19:16:

и вроде все верно, интересно почему...
 

slip

Guest
Эм, нет...вставляю прямо в запрос к БД в скрипте....

-~{}~ 28.06.05 19:33:

я через Дэнвер работаю...а там нет консоли а только phpMyadmin

-~{}~ 28.06.05 19:33:

точнее она есть, но где то глубоко в костях дэнвера...:)
 

slip

Guest
:) были и такие проколы, но щас там два столбца, первы равен 1 и второй равен 2

-~{}~ 28.06.05 19:44:

почему он не выводит sklad.kolvo наверное потому что во втором примере стоит AS total а я вывожу slad.kolvo но тогда почему он не считает total я не могу понять..
 
Сверху