Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Результат выполнения SUM(table_name) на php


Автор: wolfmessing 20.2.2008, 13:12
Собсно конкретный код:

Код

$query_all_day = mysql_query("SELECT SUM(online_count) FROM online WHERE online_last = $now_date");
      if(mysql_num_rows($query_all_day)>0){
            while($res = mysql_fetch_array($query_all_day)){
                  echo $res['SUM(online_count)'];
            }
      }


Я с такой задачей ещё не сталкивался, mysql_fetch_array тут почемуто не катит, хотелось бы мнение знающих, саму функцию на рнр,
чтобы можно было увидеть результат выполнения SUM(online_count) в браузере

Автор: bars80080 20.2.2008, 13:21
Код

function select_from_db($q) {
    $r = mysql_query($q);
    @$n = mysql_num_rows($r);
    for($i = 0; $i < $n; $i++) {
        $s[$i] = mysql_fetch_array($r, MYSQL_ASSOC); }
    if(!empty($s)) return $s;
    else return ''; }


$sql = "SELECT SUM(online_count) FROM online WHERE online_last = $now_date";
$r = select_from_db($sql);
var_dump($r);


попробуй так

Добавлено через 2 минуты и 13 секунд
чегой-то не посмотрел, у тебя по сути то же самое, у меня сработало

может у тебя в поле не числовые значения? или ещё где путаница

Автор: A1ekcandr 20.2.2008, 13:24
запрос вам возвращает конкретное число а не число записей, соответственно нет смысла писать mysql_num_rows($query_all_day)>0 это бред, помоему надо делать так 

Код

$query_all_day=mysql_query("SELECT SUM(online_count) as SUM FROM online WHERE online_last = $now_date");
$res = mysql_fetch_assoc($query_all_day);
echo "SUMMA".$res['SUM'];

Автор: GeneralElectric 20.2.2008, 13:27
А поле online_last - в формате unix timestamp?

Автор: Fally 20.2.2008, 13:28
A1ekcandr, echo "SUMMA".$res['SUM']; - не верно, такого элемента в массиве нету..

Автор: wolfmessing 20.2.2008, 13:34
Спасибо всё получитось, примерно так:

Код

$query_all_day = $sql->query("SELECT SUM(online_count) AS online_count FROM online");      
      if($sql->num_rows($query_all_day)){
            while($res = $sql->fetch_array($query_all_day)){                   
                  echo $res['online_count'];
            }
      }


С этим online_last всех запутал  smile  smile  , а мне просто сумма нужна была, ошибку понял (AS  online_count)
 smile  smile  Спасибо всем большое

Автор: A1ekcandr 20.2.2008, 13:34
Цитата

A1ekcandr, echo "SUMMA".$res['SUM']; - не верно, такого элемента в массиве нету.. 


жаль в данный момент проверить не могу но вроде должно работать, смотри запрос as SUM

Автор: GeneralElectric 20.2.2008, 13:41
A1ekcandr, у него запрос ничего не возвращал.
пытался получить записи за 1990 год примерно.

Автор: wolfmessing 20.2.2008, 13:55
Товаищи, давайте остановимся на
Код

$query_all_day = $sql->query("SELECT SUM(online_count) AS online_count FROM online");      
      if($sql->num_rows($query_all_day)){
            while($res = $sql->fetch_array($query_all_day)){                   
                  echo $res['online_count'];
            }
      }

даты у меня все есть, точнее за 3 прошлых дня, мне только сумма была нужна (посещений за день), мог бы на рнр это писать, но решил заморочица в БД (что бы сразу суммировал), выше приведённый код решил эту задачу  smile 

А всем кто помогал ОГРОМНОЕ СПАСИБО !!!  smile 

Автор: Fally 20.2.2008, 13:55
A1ekcandr, as SUM я действительно не заметил... прошу прощения.

Автор: GeneralElectric 20.2.2008, 14:53
wolfmessing, ты считаешь не за день, а за год. Что у тебя в переменной $now_date?

Автор: wolfmessing 20.2.2008, 16:29
Это за всё время уникальных ИП
Код

$query_all_day = $sql->query("SELECT SUM(online_count) AS online_count FROM online");
      
      if($sql->num_rows($query_all_day)){
            while($res = $sql->fetch_array($query_all_day)){                   
                  echo"<br>";
                  echo $res['online_count'];
            }
      }

это за сегодня, где 
Код

$now_date = date("Y-m-d");

Код

$query_day = $sql->query("SELECT SUM(online_count) AS online_count FROM online 
                        WHERE online_last ='".$now_date."'");
      if($sql->num_rows($query_day)){
            while($res = $sql->fetch_array($query_day)){                   
                  echo"<br>";
                  echo $res['online_count'];
            }
      }

 smile 
Табла пока такая:
Код

CREATE TABLE `online` (
`online_id` INT( 10 ) UNSIGNED NOT NULL AUTO_INCREMENT ,
`online_ip` VARCHAR( 50 ) NOT NULL ,
`online_name` VARCHAR( 50 ) NOT NULL ,
`online_last` DATE DEFAULT '0000-00-00' NOT NULL ,
`online_count` VARCHAR( 50 ) NOT NULL ,
PRIMARY KEY (`online_id`),
UNIQUE      (`online_ip`)
) TYPE = MYISAM ;

Автор: GeneralElectric 20.2.2008, 16:35
воооот. теперь правильно =)
а то считал сколько будет 2008 вычесть 2 и вычесть ещё 20, а потом результат сравнивал с датой ;-)
в mysql, кстати, есть функция curdate()

Автор: wolfmessing 20.2.2008, 16:38
Сори что уже за ОффТоп залезаю, в мускуле есть что нить по высчитыванию недели или месяца?

Ааа... Сори ещё раз уже всё нашол http://www.mysql.ru/docs/man/Date_and_time_functions.html

Автор: GeneralElectric 20.2.2008, 16:43
Есть ли в мускуле что нить по высчитыванию недели или месяца? Да если в мускуле нету, то нету больше нигде. Там функции на любой случай, на любой вкус.
ссылку навскидку не скажу, но там несложно. можно просто через mysql curdate в гугле найти

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)