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

Форум MySQL

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

 

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

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

тема: Подсчитать записи в таблице
 
 автор: kis-kis   (03.04.2009 в 19:34)   письмо автору
 
 

Есть таблица категорий


CREATE TABLE `places_category` (
  `id` int(11) NOT NULL auto_increment,
  `subcat` smallint(11) default '0',
  `title` varchar(100) NOT NULL,
  `en_title` varchar(100) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=79 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=79 ;

INSERT INTO `places_category` VALUES (1, 0, 'Авто', 'auto');
INSERT INTO `places_category` VALUES (2, 0, 'Бизнес, экономика', 'business');
INSERT INTO `places_category` VALUES (3, 0, 'Общество', 'society');
INSERT INTO `places_category` VALUES (4, 1, 'автосалоны', 'motor_show');
INSERT INTO `places_category` VALUES (5, 1, 'автосервисы, СТО', 'sto');
INSERT INTO `places_category` VALUES (6, 1, 'спецтехника', 'special');
INSERT INTO `places_category` VALUES (7, 1, 'запчасти', 'parts');
INSERT INTO `places_category` VALUES (8, 1, 'прокат', 'rent');
...


и таблица мест


CREATE TABLE `places` (
  `id` int(11) NOT NULL auto_increment,
  `category` smallint(1) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=223 DEFAULT CHARSET=cp1251 PACK_KEYS=0 AUTO_INCREMENT=223 ;


Подскажите, как можно подсчитать кол-во записей мест для каждой подкатегории.
Заранее спасибо.

  Ответить  
 
 автор: Trianon   (03.04.2009 в 21:41)   письмо автору
 
   для: kis-kis   (03.04.2009 в 19:34)
 

SELECT category, COUNT(*) AS cnt FROM places GROUP BY category


почему smallint?

И почему smallint(11) ?

  Ответить  
 
 автор: kis-kis   (07.04.2009 в 19:10)   письмо автору
 
   для: Trianon   (03.04.2009 в 21:41)
 

>почему smallint?

Ошибка, там int

Я имел ввиду относительно главной категории, у которой subcat=0. Спасибо за ответ!

  Ответить  
 
 автор: Trianon   (07.04.2009 в 19:45)   письмо автору
 
   для: kis-kis   (07.04.2009 в 19:10)
 

>Я имел ввиду относительно главной категории, у которой subcat=0. Спасибо за ответ!

не понял фразы.

  Ответить  
 
 автор: kis-kis   (07.04.2009 в 19:54)   письмо автору
 
   для: Trianon   (07.04.2009 в 19:45)
 

В дампе основные категории первые 3, затем идут их подкатегории. Как подсчитать кол-во записей относительно первых трех (если места в таблице имеют идентификатор именно подкатегории)?

Примерно так:

Авто (это главная категория) (посчитать кол-во мест из всех подкатегорй данной категории и вывести здесь - 28)
- автосалоны (подкатегория) (допустим, здесь 5 мест)
- автосервисы (подкатегория) (12 мест)
- спецтехника (11 мест)
- ...

  Ответить  
 
 автор: Trianon   (07.04.2009 в 20:11)   письмо автору
 
   для: kis-kis   (07.04.2009 в 19:54)
 

При произвольной глубине - только рекурсивным обходом всего дерева.
отталкиваться можно от этой темы
http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=27058

  Ответить  
 
 автор: kis-kis   (07.04.2009 в 20:22)   письмо автору
 
   для: Trianon   (07.04.2009 в 20:11)
 

Я имел вот это - Авто (279)

http://list.ngs24.ru/

  Ответить  
 
 автор: kis-kis   (07.04.2009 в 23:57)   письмо автору
 
   для: kis-kis   (07.04.2009 в 20:22)
 

Подскажите, не пойму, как воспользоваться данной ф-цией...


<? 
$sql 
"SELECT id, parent, name FROM tab"
$res mysql_query($sql) or die("Error in $sql: ".mysql_error()); 
$tree = array(); $names = array(); 
while(
$row mysql_fetch_row($res)) 

    list(
$id$parent$name) = $row
    
$tree[$parent][] = $id
    
$names[$id] = $name


function 
recur_count($tree$p)
{
    
$cnt =0
    if(isset(
$tree[$p]))
      for(
$cnt=1$idx 0$idx count($tree[$p]); $idx++) 
        
$cnt += recur_count($tree$tree[$p][$idx]);
    return 
$cnt;
}
?> 

  Ответить  
 
 автор: Trianon   (08.04.2009 в 09:12)   письмо автору
 
   для: kis-kis   (07.04.2009 в 23:57)
 

не надо ей пользоваться.
Но на её примере можно написать свою.

  Ответить  
Rambler's Top100
вверх

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