|
|
|
| Господа помогите пожалуйста решить проблему, у меня уже мозги кипят.
Имеем доску объявлений в которой есть категории и масса вложенных подкатегорий, как подсчитать сколько объявлений в категории включая и ее все подкатегории?
-------------------------------------------------------------------------------------------------------------------------------------
Пример вывода:
Иномарки (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 ; | |
|
|
|
|
|
|
|
для: 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'");
|
| |
|
|
|
|
|
|
|
для: 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
Как мне пересчитать в категории "Авто/Мото" все объявления в подкатегориях и в подподкатегориях? | |
|
|
|
|
|
|
|
для: Ruthless
(27.06.2008 в 15:28)
| | Не совсем понятно..., у Вас в id_cat таблицы baza что записывается? | |
|
|
|
|
|
|
|
для: 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);
|
А как их всех потом сложить, чтобы получилась конечная цифра количества объявлений? | |
|
|
|
|
|
|
|
для: 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'");
?>
|
| |
|
|
|
|
|
|
|
для: 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;
}
|
| |
|
|
|