Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: как посчитать сумму одного столбца таблицы по двум критериям?
 
 автор: Bvz   (14.09.2009 в 12:57)   письмо автору
 
 

как посчитать сумму одного столбца таблицы по двум критериям?

$master = "SELECT * FROM master ORDER BY id";
$master_query = mysql_query("$master");
while ($master_select = mysql_fetch_assoc($master_query))
        {
            echo $master_select['name'];
            $summa = "SELECT * FROM visit WHERE date= '".$day."' AND id_master= '".$master_select['id']."'";

            $summa_query = mysql_query("$summa ");
            while ($summa_select = mysql_fetch_assoc($summa_query))
            {
            $s += $summa_select['summa'];
            echo $s;
            }

        }
}


вот так он выдает всю прогрессию суммы, а мне надо конечную цифру

  Ответить  
 
 автор: Balamut182   (14.09.2009 в 13:07)   письмо автору
 
   для: Bvz   (14.09.2009 в 12:57)
 

SELECT SUM(`summa`) FROM `visit` WHERE `date` = '">$day."' AND `id_master` = '".$master_select['id']."' GROUP BY `id_master`"

может так?

  Ответить  
 
 автор: Саня   (14.09.2009 в 13:07)   письмо автору
 
   для: Bvz   (14.09.2009 в 12:57)
 

Попробуйте этот запрос:
<?
$q 
"SELECT `master`.*, SUM(`visit`.`summa`)
      FROM `master`
      LEFT JOIN `visit`
        ON `visit`.`id_master`=`master`.`id`
      WHERE `date`='"
.$day."'
      GROUP BY `master`.`id`"
;

  Ответить  
 
 автор: Bvz   (14.09.2009 в 13:42)   письмо автору
 
   для: Саня   (14.09.2009 в 13:07)
 

а как потом на php результат вывести?
делаю
$master = "SELECT * FROM master ORDER BY id";
$master_query = mysql_query("$master");
while ($master_select = mysql_fetch_assoc($master_query))
        {
            echo $master_select['name']; 
            $summa = "SELECT SUM(summa) FROM visit WHERE date= '".$day."' AND id_master= '".$master_select['id']."'"; 
            $summa_query = mysql_query("$summa ");
            $summa_select = mysql_fetch_assoc($summa_query);
            {
            echo $summa_select['summa'];
            }


        }
}

выводит
[quote]Resource id #13[/quote]

  Ответить  
 
 автор: Саня   (14.09.2009 в 14:11)   письмо автору
 
   для: Bvz   (14.09.2009 в 13:42)
 

<? 
$q 
"SELECT `master`.*, SUM(`visit`.`summa`) 
      FROM `master` 
      LEFT JOIN `visit` 
        ON `visit`.`id_master`=`master`.`id` 
      WHERE `date`='"
.$day."' 
      GROUP BY `master`.`id`"
;
$query mysql_query($q);

if ( 
$query ) {
  while ( 
$fetch mysql_fetch_assoc($query) ) {
    
print_r($fetch);
  }
}

  Ответить  
 
 автор: Bvz   (14.09.2009 в 22:28)   письмо автору
 
   для: Саня   (14.09.2009 в 14:11)
 

как вместо print_r($fetch); вывести сумму?

попробую снова задачу поставить, есть таблица master в ней 2 поля id и name, т.е идентификатор и имя мастреа, есть 2-я таблица visit в ней много полей в частность id_master, summa и date соотетсвтенно идентификатор мастера, некое число и дата посещения, как сделать, чтоб отобразить всех мастеров по порядку, плюс рядом общую сумму чисел, которые были записаны в определенную дату?

  Ответить  
 
 автор: Trianon   (14.09.2009 в 22:47)   письмо автору
 
   для: Bvz   (14.09.2009 в 22:28)
 

для этого надо понять, что выводит print_r()

  Ответить  
 
 автор: Bvz   (14.09.2009 в 22:54)   письмо автору
 
   для: Trianon   (14.09.2009 в 22:47)
 

он выводит кучу подобных массивов
Array ( [id] => 1 [speciality] => 1 [name] => Иван [SUM(`visit`.`summa`)] => 2400.00 )

а мне надо чтоб он выводил
Иван 2400.00

попробую снова задачу поставить, есть таблица master в ней 2 поля id и name, т.е идентификатор и имя мастреа, есть 2-я таблица visit в ней много полей в частность id_master, summa и date соотетсвтенно идентификатор мастера, некое число и дата посещения, как сделать, чтоб отобразить всех мастеров по порядку, плюс рядом общую сумму чисел, которые были записаны в определенную дату?

  Ответить  
 
 автор: heed   (14.09.2009 в 23:09)   письмо автору
 
   для: Bvz   (14.09.2009 в 22:54)
 

нужно использовать easy_print_r() вместо print_r() :)
только сначала её надо объявитьтак
function easy_print_r($array){
 if (!is_array($array)) echo '';
 else echo implode(' ', $array) ."<br/>\n";
}


upd// добавил ."<br/>\n"

  Ответить  
 
 автор: Bvz   (14.09.2009 в 23:20)   письмо автору
 
   для: heed   (14.09.2009 в 23:09)
 

чем дальше в лес, тем больше дров :)

  Ответить  
 
 автор: heed   (14.09.2009 в 23:44)   письмо автору
 
   для: Bvz   (14.09.2009 в 23:20)
 

Ну а чегоЖ)
если-бы там непонравилось что нули где-то в массивах получаются, а то вообще не понравилось что массивы получились

там в print_r() было всё показано , какие ключи у каких елементов.
Может нужно будет написать что-то вообще такое
<?
echo '<a href="delmaster.php?id='$fetch['id']
 .
'">Удалить мастера</a><br/>' ."\n"
 
.'а зовут его '$fetch['name']  .' и заработал он всего '
 
$fetch['SUM(`visit`.`summa`)'] ."<hr/>\n";
кстати ниже нормально предложено как заменить $fetch['SUM(`visit`.`summa`)'] напросто $fetch['summa']

  Ответить  
 
 автор: Bvz   (15.09.2009 в 10:38)   письмо автору
 
   для: heed   (14.09.2009 в 23:44)
 

в целом спасибо, а вообще хотелось детально этот пример разобрать, чтоб потом не мучать форумчан подобными вопросами, поможите разобрать что и для чего?

  Ответить  
 
 автор: Саня   (15.09.2009 в 11:29)   письмо автору
 
   для: Bvz   (15.09.2009 в 10:38)
 

# перечисляем данные, которые нужно выбрать
SELECT `master`.*, SUM(`visit`.`summa`) 

# из таблицы master
FROM `master`  

# присоединяем данные из таблицы visit
LEFT JOIN `visit`  

  # критерий присоединения - совпадение идентификаторов мастера из таблиц visit и master
  ON `visit`.`id_master`=`master`.`id`  

# за указанный день
WHERE `date`='".$day."'  

# группируем отдельно по каждому мастеру
GROUP BY `master`.`id`"

  Ответить  
 
 автор: Bvz   (15.09.2009 в 11:42)   письмо автору
 
   для: Саня   (15.09.2009 в 11:29)
 

спасибо!!!

  Ответить  
 
 автор: Trianon   (15.09.2009 в 11:45)   письмо автору
 
   для: Саня   (15.09.2009 в 11:29)
 

Это некорректное описание - в принципе.

# перечисляем данные, которые нужно выбрать
SELECT `master`.*, SUM(`visit`.`summa`) 

# из табличного выражения 
FROM   ( 
  # к таблице 
   `master`  
       # присоединяем данные из таблицы visit
     LEFT JOIN `visit`  
  # критерий присоединения - совпадение идентификаторов мастера из таблиц visit и master
        ON `visit`.`id_master`=`master`.`id`    
)
# за указанный день
WHERE `date`='".$day."'  

# группируем отдельно по каждому мастеру
GROUP BY `master`.`id`"


Скобки, добавленные мной, можно опустить. Суть от этого не изменится. В разделе FROM указывается табличное выражение (произвольной сложности), а не одна таблица.
LEFT JOIN является не отдельным разделом, а табличной операцией.

  Ответить  
 
 автор: Bvz   (15.09.2009 в 12:01)   письмо автору
 
   для: Trianon   (15.09.2009 в 11:45)
 

еще раз спасибо!

  Ответить  
 
 автор: Bvz   (16.09.2009 в 01:12)   письмо автору
 
   для: Саня   (15.09.2009 в 11:29)
 

а если надо посчитать несколько сум нескольких столбцов

  Ответить  
 
 автор: cheops   (16.09.2009 в 01:15)   письмо автору
 
   для: Bvz   (16.09.2009 в 01:12)
 

Просто перечисляйте функции SUM() с соответствующими столбцами через запятую.

  Ответить  
 
 автор: Trianon   (15.09.2009 в 11:19)   письмо автору
 
   для: heed   (14.09.2009 в 23:44)
 

>кстати ниже нормально предложено как заменить $fetch['SUM(`visit`.`summa`)'] напросто $fetch['summa']

Вот против этого не могу не возразить.
Делать алиас, совпадающий с именем существующего объекта - крайне неряшливо.
Во-первых, очень тяжело воспринимается человеком.
Во-вторых, могут возникнуть неоднозначности и побочные эфффекты, нарушающие планируемое поведение запроса.
Безусловно, отвлеченный алиас - только благо в подобной ситуации.

  Ответить  
 
 автор: .........   (14.09.2009 в 22:48)
 
   для: Bvz   (14.09.2009 в 22:28)
 

SELECT `master`.*, SUM(`visit`.`summa`) AS summa
FROM

echo $summa_select['summa'];

  Ответить  
 
 автор: Bvz   (14.09.2009 в 22:55)   письмо автору
 
   для: .........   (14.09.2009 в 22:48)
 

ничего подобного

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования