Как суммировать значения одинаковых ячеек в таблице mysql на php?

Здравствуйте,
У меня такая задача, которую никак не получается решить. Есть таблица списка коренных категорий вмести с дочерними категориями. А также есть таблица объявлений, которые связываются с таблицей категорий. Нужно чтобы мы смогли соединиться к 2 таблицам и подсчитать объявления, которые относятся и коренным и дочерним категориям и вывести количество (например, авто(49). В авто имеются скажем 3 подкатегорий, в которых хранятся объявления, а в самом коренном категории авто нет объявлений, а только подкатегории, в которых хранятся объявления. Необходимо, чтобы мы смогли подсчитать сколько объявлений в дочерних категориях и вывести их количество рядом с коренной категорией). Ниже приведен код, в котором никак не могу добиться ожидаемого результата. Прошу вас помочь с решением данного вопроса. Заранее спасибо.
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .php.geshi_code {font-family:monospace;} .php.geshi_code .imp {font-weight: bold; color: red;} .php.geshi_code .kw1 {color: #b1b100;} .php.geshi_code .kw2 {color: #000000; font-weight: bold;} .php.geshi_code .kw3 {color: #990000;} .php.geshi_code .co1 {color: #666666; font-style: italic;} .php.geshi_code .co2 {color: #666666; font-style: italic;} .php.geshi_code .co3 {color: #0000cc; font-style: italic;} .php.geshi_code .co4 {color: #009933; font-style: italic;} .php.geshi_code .coMULTI {color: #666666; font-style: italic;} .php.geshi_code .es0 {color: #000099; font-weight: bold;} .php.geshi_code .es1 {color: #000099; font-weight: bold;} .php.geshi_code .es2 {color: #660099; font-weight: bold;} .php.geshi_code .es3 {color: #660099; font-weight: bold;} .php.geshi_code .es4 {color: #006699; font-weight: bold;} .php.geshi_code .es5 {color: #006699; font-weight: bold; font-style: italic;} .php.geshi_code .es6 {color: #009933; font-weight: bold;} .php.geshi_code .es_h {color: #000099; font-weight: bold;} .php.geshi_code .br0 {color: #009900;} .php.geshi_code .sy0 {color: #339933;} .php.geshi_code .sy1 {color: #000000; font-weight: bold;} .php.geshi_code .st0 {color: #0000ff;} .php.geshi_code .st_h {color: #0000ff;} .php.geshi_code .nu0 {color: #cc66cc;} .php.geshi_code .nu8 {color: #208080;} .php.geshi_code .nu12 {color: #208080;} .php.geshi_code .nu19 {color:#800080;} .php.geshi_code .me1 {color: #004000;} .php.geshi_code .me2 {color: #004000;} .php.geshi_code .re0 {color: #000088;} .php.geshi_code span.xtra { display:block; }

<?    
$GLOBALS['cccount'] = 0;
if (defined('JBCITY')) $GLOBALS['subQuery'] = ' AND city_id = '.JBCITY; else $GLOBALS['subQuery'] = '';
function listcat2($id,$sub){
  $categories = mysql_query("SELECT id, child_category, name_cat, en_name_cat FROM jb_board_cat WHERE root_category = $id ORDER by sort_index"); cq();
  while($category = mysql_fetch_assoc($categories)){
    $name_cat = (defined('JBLANG') && constant('JBLANG')=='en') ? $category['en_name_cat'] : $category['name_cat'];
    $count_ads = mysql_result(mysql_query("SELECT COUNT(id) from jb_board WHERE id_category='".$category['id']."' AND old_mess='old'".$GLOBALS['subQuery']), 0);cq();
    //if($sub=="2") $subclass="class="subclass"";else $subclass="";
        echo "(".$count_ads++.")";
     $GLOBALS['cccount'] = $GLOBALS['cccount'] + $count_ads;
     if($category['child_category']==1){listcat2($category['id'],$sub+1);}
  }
}

$categories = mysql_query("SELECT id, root_category, child_category, name_cat,en_name_cat,img FROM jb_board_cat WHERE root_category=0 ORDER by sort_index");  cq();
$num_rows = @mysql_num_rows($categories);
$count_field=round($num_rows/2);$td=0;
echo "<div style="float:left;width:50%;" class="index_cat gray sm">";
while($category = @mysql_fetch_assoc($categories)){
  $name_cat = (defined('JBLANG') && constant('JBLANG')=='en') ? $category['en_name_cat'] : $category['name_cat'];
  echo (@$category['img'])?"<img alt="".$name_cat."" class="rootcatimg" src="".$u."cat/".$category['img']."" />":"";
echo "<a class="rootcat" href="c".$category['id'].".html">".$name_cat." </a> ";
listcat2($category['id'],1);
  echo "

"
;
  $td++;if($td>=$count_field){echo "</div><div style="float:right;width:50%;" class="index_cat gray sm">";$td=0;}
}
echo "</div><div class="clear"></div>";
?>
 

1 ответов


Вот так примерно можно


SELECT COUNT(id) FROM `jb_board` WHERE `id_category` IN (SELECT `id` FROM `jb_board_cat` WHERE `root_category` = $id)
 

или так


SELECT COUNT(jb_board.id) FROM `jb_board` LEFT JOIN `jb_board_cat` ON jb_board.id_category = jb_board_cat.id WHERE jb_board_cat.root_category = $id
 

Тут ниже приведен тот код в целом:


<?
$GLOBALS['cccount'] = 0;
if (defined('JBCITY')) $GLOBALS['subQuery'] = ' AND city_id = '.JBCITY; else $GLOBALS['subQuery'] = '';
function listcat2($id,$sub){
  $categories = mysql_query("SELECT id, child_category, name_cat, en_name_cat FROM jb_board_cat WHERE root_category = $id ORDER by sort_index"); cq();
  while($category = mysql_fetch_assoc($categories)){
    $name_cat = (defined('JBLANG') && constant('JBLANG')=='en') ? $category['en_name_cat'] : $category['name_cat'];
    $count_ads = mysql_result(mysql_query("SELECT COUNT(id) from jb_board WHERE id_category='".$category['id']."' AND old_mess='old'".$GLOBALS['subQuery']), 0);cq();
    //if($sub=="2") $subclass="class=\"subclass\"";else $subclass="";
        echo "(".$count_ads.")";
     $GLOBALS['cccount'] = $GLOBALS['cccount'] + $count_ads;
     if($category['child_category']==1){listcat2($category['id'],$sub+1);}
  }
}

$categories = mysql_query("SELECT id, root_category, child_category, name_cat,en_name_cat,img FROM jb_board_cat WHERE root_category=0 ORDER by sort_index");  cq();
$num_rows = @mysql_num_rows($categories);
$count_field=round($num_rows/2);$td=0;
echo "<div style=\"float:left;width:50%;\" class=\"index_cat gray sm\">";
while($category = @mysql_fetch_assoc($categories)){
  $name_cat = (defined('JBLANG') && constant('JBLANG')=='en') ? $category['en_name_cat'] : $category['name_cat'];
  echo (@$category['img'])?"<img alt=\"".$name_cat."\" class=\"rootcatimg\" src=\"".$u."cat/".$category['img']."\" />":"";
$lastres = mysql_query("SELECT COUNT(id) FROM `jb_board` WHERE `id_category` IN (SELECT `id` FROM `jb_board_cat` WHERE `root_category` = $id)");
echo "".$name_cat." (".$lastres.") ";
  $td++;if($td>=$count_field){echo "</div><div style=\"float:right;width:50%;\" class=\"index_cat gray sm\">";$td=0;}
}
echo "</div><div class=\"clear\"></div>";
?>
 
Спасибо за поддержку.