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

Форум MySQL

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

 

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

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

тема: Подсчет объявлений в подкатегориях
 
 автор: Ruthless   (27.06.2008 в 14:17)   письмо автору
 
 

Господа помогите пожалуйста решить проблему, у меня уже мозги кипят.
Имеем доску объявлений в которой есть категории и масса вложенных подкатегорий, как подсчитать сколько объявлений в категории включая и ее все подкатегории?
-------------------------------------------------------------------------------------------------------------------------------------
Пример вывода:

Иномарки (22 объявления)
Acura | Alfa Romeo | Audi | BMW | BYD | Cadillac | Chery | Chevrolet | Chrysler | Citroen | Dadi | Daewoo | Daihatsu | Dodge | Faw | Fiat | Ford | GMC | Great Wall | Hafei | Honda | Hummer | Hyundai | Infiniti | Isuzu | Jaguar | Jeep | KIA | Lancia | Land Rover | Lexus | Lotus | Mazda | Mercedes | Mercury | MG | Mini | Mitsubishi | Nissan | Opel | Peugeot | Porsche | Proton | Renault | Rover | Saab | Seat | Skoda | SsangYong | Subaru | Suzuki | Tianye | Toyota | Volkswagen | Volvo | Xin Kai
-------------------------------------------------------------------------------------------------------------------------------------
Структура таблицы категорий в MySQL:

CREATE TABLE IF NOT EXISTS `category` (
`id` int(8) NOT NULL auto_increment,
`name_cat` tinytext NOT NULL,
`opisanie` tinytext NOT NULL,
`hide` enum('show','hide') NOT NULL default 'show',
`id_parent` int(8) NOT NULL default '0',
PRIMARY KEY (`id`),
KEY `id_parent` (`id_parent`),
FULLTEXT KEY `opisanie` (`opisanie`),
FULLTEXT KEY `name_cat` (`name_cat`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=244 ;
-------------------------------------------------------------------------------------------------------------------------------------
Структура таблицы базы объявлений в MySQL:

CREATE TABLE IF NOT EXISTS `baza` (
`id_ob` int(11) NOT NULL auto_increment,
`id_cat` varchar(20) NOT NULL default '',
`zagol_ob` varchar(255) NOT NULL default '',
`text_ob` text NOT NULL,
`date_ob` date NOT NULL default '0000-00-00',
`date_ob_exp` char(3) NOT NULL default '',
`name_poster` varchar(200) NOT NULL default '',
`contact_poster` varchar(255) NOT NULL default '',
`adress_poster` varchar(255) NOT NULL default '',
`city_ob` varchar(255) NOT NULL default '',
`ip_ob` varchar(20) NOT NULL default '',
`email_ob` varchar(255) NOT NULL default '',
`url_ob` varchar(255) NOT NULL default '',
`icq` varchar(255) NOT NULL default '',
`pass_ob` varchar(255) NOT NULL default '',
`status_ob` char(3) NOT NULL default 'no',
PRIMARY KEY (`id_ob`),
FULLTEXT KEY `text_ob` (`text_ob`),
FULLTEXT KEY `zagol_ob` (`zagol_ob`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 PACK_KEYS=0 AUTO_INCREMENT=50 ;

   
 
 автор: Rustamich   (27.06.2008 в 15:02)   письмо автору
 
   для: Ruthless   (27.06.2008 в 14:17)
 

Во-первых, для чего ты делаешь в таблице baza id_cat VARCHAR?
Во-вторых можно попробовать сделать вот так:

$id_cat = "5"; // К примеру
$query_select = mysql_query("SELECT COUNT(*) FROM baza WHERE id_cat='$id_cat'");

   
 
 автор: Ruthless   (27.06.2008 в 15:28)   письмо автору
 
   для: Rustamich   (27.06.2008 в 15:02)
 

Просто мне так нравится :)
А по поводу кода, он к сожалению не работает, я с самого начала так сделал.

Пример таблицы category:

Категория "Авто/Мото" имеет id №1

Подкатегория "Иномарки" имеет id №2 и id_parent №1
Подкатегория "Мотоциклы" имеет id №3 и id_parent №1

Подподкатегория "Cadilac" имеет id №4 и id_parent №2
Подподкатегория "Honda" имеет id №5 и id_parent №3

Как мне пересчитать в категории "Авто/Мото" все объявления в подкатегориях и в подподкатегориях?

   
 
 автор: Rustamich   (27.06.2008 в 15:42)   письмо автору
 
   для: Ruthless   (27.06.2008 в 15:28)
 

Не совсем понятно..., у Вас в id_cat таблицы baza что записывается?

   
 
 автор: Ruthless   (27.06.2008 в 15:48)   письмо автору
 
   для: Rustamich   (27.06.2008 в 15:42)
 

Столбец id из таблицы Category

Т.е. все в купе.
Категория имеет множество подкатегорий, а каждая подкатегория имеет множество подподкатегорий. Так вот эти подподкатегории имеют каждый свой id номер а как мне их в кучу собрать и во всех них динамично объявления пересчитать?


Делаем подсчет в подподкатегории "Audi"

$id=125;
$query = mysql_query("SELECT COUNT(*) from baza WHERE id_cat = '$id' AND status_ob = 'yes'") or die(mysql_error());
$col = mysql_result($query, 0, 0);


Так же делаем подсчет в подподкатегории "Volkswagen"

$id=132;
$query = mysql_query("SELECT COUNT(*) from baza WHERE id_cat = '$id' AND status_ob = 'yes'") or die(mysql_error());
$col = mysql_result($query, 0, 0);


А как их всех потом сложить, чтобы получилась конечная цифра количества объявлений?

   
 
 автор: Rustamich   (27.06.2008 в 17:48)   письмо автору
 
   для: Ruthless   (27.06.2008 в 15:48)
 

Попробуйте так:

<?

$id 
1;
$query_select mysql_query("SELECT COUNT(b.id_ob) AS ob_count FROM baza b JOIN category cat 
WHERE b.id_cat = cat.id AND cat.id_parent = '
$id'");

?>

   
 
 автор: Ruthless   (30.06.2008 в 10:14)   письмо автору
 
   для: Rustamich   (27.06.2008 в 17:48)
 

Спасибо большое, решил данную проблему следующим кодом


$rime = mysql_query("SELECT * from category WHERE id_parent = '0' ORDER BY name_cat") or die(mysql_error());
    while($row = mysql_fetch_array($rime)) {
    extract($row);
if ($_SESSION['city'] != "all") $chcyt="AND city_ob = '{$_SESSION['city']}'";
$colob2=0;
$rime1 = mysql_query("SELECT * from category WHERE id = '$id'") or die(mysql_error());
    while($row1 = mysql_fetch_array($rime1)) {

$rime2 = mysql_query("SELECT * from category WHERE id_parent = '{$row1["id"]}'") or die(mysql_error());
    while($row2 = mysql_fetch_array($rime2)) {
$qerob = mysql_query("SELECT COUNT(*) from baza WHERE id_cat = '{$row2["id"]}' $chcyt AND status_ob = 'yes'") or die(mysql_error());
$colob = mysql_result($qerob, 0, 0);
$colob2=$colob2+$colob;

$rime3 = mysql_query("SELECT * from category WHERE id_parent = '{$row2["id"]}'") or die(mysql_error());
    while($row3 = mysql_fetch_array($rime3)) {
$qerob = mysql_query("SELECT COUNT(*) from baza WHERE id_cat = '{$row3["id"]}' $chcyt AND status_ob = 'yes'") or die(mysql_error());
$colob = mysql_result($qerob, 0, 0);
$colob2=$colob2+$colob;
}
}
}
echo $colob2;
}

   
Rambler's Top100
вверх

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