[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: как сумировать количество коментариев?
denkut
у меня есть сайт http://gbrk.ru и внизу есть статистика этого сайта, а именно у меня вопрос по коментариям, сейчас сайт показывает что коментариев в базе 3, но я сумел сделать только по статьям! как мне сделать чтобы выводилось общее число коментариев, т.е коментарии по книгам + коментарии по статьям = статистика?

вот такие данные:
PHP
<?php
$chot 
mysql_query ("select count(*) from books");
$col mysql_fetch_array($chot);

$chot2 mysql_query ("select count(*) from comments_stat");
$col2 mysql_fetch_array($chot2);




$chot3 mysql_query ("select count(*) from stat");
$col3 mysql_fetch_array($chot3);



 

function 
online () {
$ip=getenv("HTTP_X_FORWARDED_FOR");
if (empty(
$ip) || $ip=='unknown') { $ip=getenv("REMOTE_ADDR"); }
# уд. старые сессии
mysql_query ("DELETE FROM online WHERE UNIX_TIMESTAMP() - UNIX_TIMESTAMP(time) > 300") or die ("Can't delete old sess");

# проверка на присутстаие или занесение нового пользователя
$select mysql_query ("SELECT ip FROM online WHERE ip='$ip'") or die ("Can't select duble");
$tmp mysql_fetch_row ($select);
if (
$ip == $tmp[0]) {
mysql_query ("UPDATE online SET time=NOW() WHERE ip='$ip'") or die ("Can't update");
} else {
mysql_query ("INSERT INTO online (ip,time) VALUES ('$ip',NOW())") or die ("Can't insert");
}
# считывание результатов
$select mysql_query ("SELECT COUNT(*) FROM online") or die ("Can't select result");
$tmp mysql_fetch_row ($select);
$result $tmp[0];

return 
$result;
}

echo 
"<p align='left' valign='bottom' class='statistik'> В базе: $col[0] книг 
<br>В базе: $col3[0] статей
 <br> Коментариев: $col2[0]
 <br> Сейчас на сайте: "
.online()."ч.
 </p>"
;






Спустя 7 минут, 21 секунда (25.06.2009 - 14:15) gooder отдыхающий написал(а):
не поверишь
для этого надо сложить кол-во комментариев у статей и у книг!

Спустя 11 минут, 53 секунды (25.06.2009 - 14:26) denkut написал(а):
я то верю, как это сделать, я что только не пробывал, поскажи, плиз!!!!

Спустя 2 минуты, 17 секунд (25.06.2009 - 14:29) gooder отдыхающий написал(а):
denkut
и что вы только не пробовали?

Спустя 7 минут, 58 секунд (25.06.2009 - 14:37) Oyeme написал(а):
3 Способоа через sql

1.



SQL
select ( select count(*) from Table1 )
+ ( select count(*) from Table2 )
as total_rows
from my_one_row_table


2.


SQL
select sum(rows)
as total_rows
from ( select count(*) as rows
from Table1 union all
select count(*) as rows
from Table2 ) as u


3.
SQL
select t1.rows + t2.rows
as total_rows
from ( select count(*) as rows
from Table1 ) as t1
cross join (
select count(*) as rows
from Table2 ) as t2



4 Путём сложение переменных.(Php)
$b =5;
$c =6;
$a = $b+$c;
В твоём случаи это рузультаты запросов.

Спустя 16 минут, 46 секунд (25.06.2009 - 14:53) denkut написал(а):
Oyeme

блин я незнаю как это сделать в sql sad.gif может както можно на php

Спустя 12 минут, 41 секунда (25.06.2009 - 15:06) denkut написал(а):
делаю такой запрос:
PHP
<?
$chot10 mysql_query ("select count(*) from comments_stat  +  comments "); 
$col10 mysql_fetch_array($chot10);
echo 
"Коментариев: $col10[0]";

не работает

comments_stat и comments это те самы две таблицы с коментариями

Спустя 3 минуты, 28 секунд (25.06.2009 - 15:10) Oyeme написал(а):
Цитата (denkut @ 25.06.2009 - 11:53)
Oyeme

блин я незнаю как это сделать в sql sad.gif может както можно на php

Я так понел у тебя имеються 2 таблици которые содержут в себе комментарии.


Первый запрос (сomments_stat)
PHP
$chot2 = mysql_query ("select count(*) from comments_stat");
$col2 = mysql_fetch_array($chot2);


Второй запрос (comments - это вторая таблица,комментырии по книгам)

PHP
$chot4 = mysql_query ("select count(*) from comments");
$col4 = mysql_fetch_array($chot4);


Сумма = Первый запрос + Второй запрос

PHP
$sum = $col2[0] + $col4[0];


через sql


SQL
select t1.rows + t2.rows
as total_rows
from ( select count(*) as rows
from comments_stat ) as t1
cross join (
select count(*) as rows
from comments ) as t2

Спустя 18 минут, 28 секунд (25.06.2009 - 15:28) denkut написал(а):
ВСЕ СДЕЛАл ВОТ ТАК:

PHP
$chot2 mysql_query ("select count(*) from comments_stat");
$col2 mysql_fetch_array($chot2);
$chot10 mysql_query ("select count(*) from comments "); 
$col10 mysql_fetch_array($chot10);
$sum $col2[0] + $col10[0];
echo 
"Коментариев: $sum[0]";



БАЗУ НЕ ТРОГАЛ, ВЫВОДИТ ПУСТОТУ! ЧТО НЕПРАВИЛЬНО?

Спустя 1 минута, 58 секунд (25.06.2009 - 15:30) Joker написал(а):
Выведи поотделности $col2 и $col10 и посмотри что в них.... может таблицы не те...

Спустя 7 минут, 22 секунды (25.06.2009 - 15:37) Kuliev написал(а):
denkut
PHP
echo "Коментариев: ".$sum;


Спустя 3 минуты, 8 секунд (25.06.2009 - 15:41) denkut написал(а):
проверил! по отдельности выводит а сумму нет! sad.gif помоги!!! очень надо!

Спустя 1 минута, 50 секунд (25.06.2009 - 15:42) denkut написал(а):
Kuliev

молодец!!! спасибо тебе! все работает

Спустя 3 часа, 33 минуты, 33 секунды (25.06.2009 - 19:16) ИНСИ написал(а):
я бы сделал так:

PHP
function get_count($patch)
{
      
$result mysql_query("SELECT COUNT(*) FROM $patch");
      return 
$result;
}

$count_book get_count(comment_book);
$count_comm get_count(comment_post);

$count $count_book count_comm;
echo 
$count;


если где-то ошибся, буду ждать критики =)))

Спустя 16 минут, 46 секунд (25.06.2009 - 19:33) glock18 написал(а):
welbox2, ошибся, увы smile.gif

функция вернет не количество, а соединение с mysql, где ты можешь получить это самое количество.

Спустя 1 минута, 54 секунды (25.06.2009 - 19:35) Kuliev написал(а):
Цитата (welbox2 @ 25.06.2009 - 21:16)
я бы сделал так:

PHP
function get_count($patch)
{
      $result = mysql_query("SELECT COUNT(*) FROM $patch");
      return $result;
}

$count_book = get_count(comment_book);
$count_comm = get_count(comment_post);

$count = $count_book + count_comm;
echo $count;


если где-то ошибся, буду ждать критики =)))

Все это делается в один запрос, зачем городить отдельно функцию? blink.gif
SQL
SELECT ( SELECT COUNT(*) FROM `comments_stat` )
+ ( SELECT COUNT(*) FROM `comments_stat` )
AS total
FROM `comments_stat`, `comments_stat`
ORDER BY 1



Спустя 27 минут, 20 секунд (25.06.2009 - 20:02) glock18 написал(а):
Kuliev в запросе еще две последние строки можно убрать smile.gif

я бы кстати без вложенных запросов посчитал - юнионом. думаю так быстрее будет.


Спустя 15 часов, 12 минут, 47 секунд (26.06.2009 - 11:15) ИНСИ написал(а):
PHP
function get_count($patch)
{
      $result = mysql_query("SELECT COUNT(*) FROM $patch");
      $temp = mysql_fetch_array($result);
      $count = $temp[0];
      return $count;
}

$count_book = get_count(comment_book);
$count_comm = get_count(comment_post);

$count = $count_book + count_comm;
echo $count;


исправил, я просто решил посмотреть, как отреагируете, будите ли ругать меня или дадите советы =)))

но если тут ошибки, тогда мне МНОГО еще чему, надо учиться =)))

Спустя 38 минут, 18 секунд (26.06.2009 - 11:53) Kuliev написал(а):
glock18
Запрос не мой, я просто взял самый первый пример, так что насчет скорости не ко мне!

И вообще вариантов много как это реализовать.

welbox2
Как я уже писал выше зачем делать отдельно функцию, делать 2 разных запроса и потом складывать все это ( простите это изврат) ЭТО ВСЕ МОЖЕТ СДЕЛАТЬ МУСКУЛ В ОДИН ПРИСЕСТ!

Спустя 43 минуты, 45 секунд (26.06.2009 - 12:37) ИНСИ написал(а):
Kuliev просто мне допустим тяжело понять твой запрос. ты бы не мог его раскрыть немного? то есть все по очереди??? спасибо....

Спустя 53 минуты, 1 секунда (26.06.2009 - 13:30) Kuliev написал(а):
Цитата (welbox2 @ 26.06.2009 - 14:37)
Kuliev просто мне допустим тяжело понять твой запрос. ты бы не мог его раскрыть немного? то есть все по очереди??? спасибо....

Вот два варианта запроса

1)
SQL
SELECT ( SELECT COUNT(*) FROM `comment_book` )
+ ( SELECT COUNT(*) FROM `comment_post` )
AS total
FROM `comments_stat`, `comments_stat`
GROUP BY 1


В запросе мы считываем количество записей в одно таблице SELECT COUNT(*) FROM `comment_book`
потом пишем арифметический оператор + для сложения с количеством записей во второй таблице SELECT COUNT(*) FROM `comment_post`


AS total это псевдоним поля

FROM `comments_stat`, `comments_stat` имена таблиц в которых идет подсчет

GROUP BY 1 - групперуем все по первому полю

В данном запросе у нас получается перекрестное объединение таблиц
по этому этот запрос будет медленно работать при большом объеме данных

2)
PHP
$sql = ("
SELECT COUNT(*) FROM `ccomment_book` AS total
UNION
SELECT COUNT(*) FROM `comment_post`
"
)
$res mysql_query($sql) or die (mysql_error() ."<br>"$sql);

while (
$row mysql_fetch_assoc($res))
{

 
$total[] = $row['total'];

}

$sum $total[0] + $total[1];
echo 
"Всего".  $sum;


Второй вариант будет работать гораздо быстрее первого!

Надеюсь объяснил. huh.gif



Спустя 54 минуты, 14 секунд (26.06.2009 - 14:24) glock18 написал(а):
Kuliev, а да не проблема.
Просто ты подписывайся хоть, если сообщение то редактируешь.

Цитата (Kuliev @ 26.06.2009 - 10:30)
Второй вариант будет работать гораздо быстрее первого!

ты проверил, да? smile.gif я как раз сейчас собирался протестить, а тут вижу ты написал rolleyes.gif

Спустя 4 минуты, 59 секунд (26.06.2009 - 14:29) Kuliev написал(а):
glock18
Да проверил, пришлось таблички создать biggrin.gif

Спустя 22 минуты, 13 секунд (26.06.2009 - 14:51) glock18 написал(а):
Kuliev, спасибо, а то мне проверить хотелось как раз. Ну вот подтвердил свои мысли насчет вложенных запросов. Может кому будет интересно:

запрос

SQL
SELECT * FROM `table` WHERE `index_field` = @var;


работает раза в два быстрее, чем

SQL
SELECT (SELECT * FROM `table` WHERE `index_field` = @var);


собственно разницы, то кажется и нет smile.gif Даже если данных там мало. А все равно. Вывод - вложенные запросы необходимость, которой нужно стараться избежать, и использовать только если "ну никак".

Спустя 8 часов, 15 минут, 1 секунда (26.06.2009 - 23:06) ИНСИ написал(а):
Kuliev огромное спасибо, действительно объяснил. Я даже не знал, что в запросе можно использовать еще запросы =))

Спустя 6 минут, 42 секунды (26.06.2009 - 23:13) twin написал(а):
Цитата
Вывод - вложенные запросы необходимость, которой нужно стараться избежать, и использовать только если "ну никак".

Тест некорректен. Ты один запрос сравниваешь с двумя. Если делать два и вытаскивать результат в PHP, то проиграет первый вариант. Правда не сильно.
Хотя я предпочитаю не усложнять запросы, если в том нет необходимости, но по другой причине. Из за читабельности.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.