Помогите составить таблицу

Статус
В этой теме нельзя размещать новые ответы.

goodvin

Человек-Волшебник
Регистрация
27 Июн 2006
Сообщения
667
Реакции
694
Есть 4 таблицы:

CREATE TABLE `country` (
`id_country` mediumint(8) unsigned NOT NULL auto_increment,
`oid` int(10) unsigned NOT NULL,
`core_country_name_ru` varchar(50) NOT NULL,
`core_country_name_en` varchar(50) NOT NULL,
`count_goods` int(128) NOT NULL,
PRIMARY KEY (`id_country`)
) ENGINE=MyISAM AUTO_INCREMENT=219 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=219 ;

CREATE TABLE `region` (
`id_region` int(10) unsigned NOT NULL auto_increment,
`id_country` mediumint(8) unsigned NOT NULL,
`oid` int(10) unsigned NOT NULL,
`core_region_name_ru` varchar(255) default NULL,
`core_region_name_en` varchar(255) NOT NULL,
`count_goods` int(128) NOT NULL,
PRIMARY KEY (`id_region`),
KEY `id_country` (`id_country`)
) ENGINE=MyISAM AUTO_INCREMENT=1612 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1612 ;

CREATE TABLE `city` (
`id_city` int(10) unsigned NOT NULL auto_increment,
`id_region` int(10) unsigned NOT NULL,
`id_country` mediumint(8) unsigned NOT NULL,
`oid` int(10) unsigned NOT NULL,
`core_city_name_ru` varchar(255) default NULL,
`core_city_name_en` varchar(255) NOT NULL,
`count_goods` int(128) NOT NULL,
PRIMARY KEY (`id_city`),
KEY `id_region` (`id_region`),
KEY `id_country` (`id_country`)
) ENGINE=MyISAM AUTO_INCREMENT=17590 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=17590 ;

CREATE TABLE `categories` (
`categories_id` bigint(20) NOT NULL default '0',
`categories_left` bigint(20) NOT NULL default '0',
`categories_right` bigint(20) NOT NULL default '0',
`categories_level` int(11) default NULL,
`categories_name` varchar(255) NOT NULL,
`categories_url` varchar(128) default NULL,
`categories_descriptions` varchar(500) default NULL,
`categories_count` bigint(128) default NULL,
PRIMARY KEY (`categories_id`),
KEY `categories_count` (`categories_count`),
KEY `categories_left` (`categories_left`),
KEY `categories_right` (`categories_right`),
KEY `categories_level` (`categories_level`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;


Теперь задача.

Нужна еще одна таблица (возможно нужно больше 1 таблицы)
ЗАдача таблицы собирать статистику сколько по каждому региону, по городу и по области есть товаров в каждом отдельном разделе. В свою очередь в разделах хранится общее количестов по данному разделу.
 
А где хрянятся связи categories_id->id_city ?
 
в таблице city поле

`id_country` mediumint(8) unsigned NOT NULL,

лишнее, ибо в таблице регионов оно уже однозначно определено

вот недостающая таблица:

Код:
CREATE TABLE `stat` (
`categories_id` bigint(20) NOT NULL default '0',
`id_city` bigint(20) NOT NULL default '0'
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
 
Может я и не прав, ну куда там и как записывать счетчик товаров?
Я думал чтото вроде

CREATE TABLE `categories_count` (
`categories` bigint(20) NOT NULL,
`country` int(128) NOT NULL,
`region` int(128) NOT NULL,
`city` int(128) NOT NULL,
`count` int(128) NOT NULL,
KEY `country` (`country`),
KEY `region` (`region`),
KEY `city` (`city`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;

Токо возникает вопрос как заносить туда данные.
Если строки нет и если строка с такой записью существует

Добавлено через 13 минут
Придумал вроде.

CREATE TABLE `categories_count` (
`hash` varchar(128) default NULL,
`categories` int(128) NOT NULL,
`country` int(128) NOT NULL,
`region` int(128) NOT NULL,
`city` int(128) NOT NULL,
`count` int(128) NOT NULL,
UNIQUE KEY `hash` (`hash`),
KEY `country` (`country`),
KEY `region` (`region`),
KEY `city` (`city`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;

Добавил одно поле hash и сделал его уникальным.
hash - это уникальные записи categories-country-region-city
Потом юзаю такой запрос при добавлении или обновлении записи

INSERT INTO `categories_count`
(hash,categories,country,region,city,count) VALUES ('1-1-1-1',1,1,1,1,'')
ON DUPLICATE KEY UPDATE count=count+1;

Соответственно удаля запись просто меняем на -1
ON DUPLICATE KEY UPDATE count=count-1;

Попрошу гуру скула проверить, тк. записей с товарами будет очень много.
 
Че молчек, глянте плиз.
Ап темы.
 
еще Вы можете использовать тригеры для большей автоматизации счетчика)
сеодня о них узнал,
единственная проблема что не все хостинги дают доступ к ним...
что делают тригеры..., это такая процедура которая выполняется только тогда когда изменяются или добавляются данные в таблицу.. отслеживают события добавления или удаения из таблицы...,
как применить сдесь: создать тригер с реакцией на добавление новой записи в таблицу стран или городов..., если добавили тогда в таблице count счетчик инкрементировать количество стран например, php уже не затрагивает бд в єтом случае=)

и кстати может выгоднее страны и города и все хранить в одной табличке)? с parentid
id title parentid =)
 
Читал и не понял, какой нужен счетчик. Если в последнем посте то что нужно, то можно твою таблицу без хеша написать:

CREATE TABLE `categories_count` (
`categories` int(128) NOT NULL,
`country` int(128) NOT NULL,
`region` int(128) NOT NULL,
`city` int(128) NOT NULL,
`count` int(128) NOT NULL,
UNIQUE KEY `categories` (`categories`,`country`,`region`,`city`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
Уникальность обеспечится индексом сразу по 4 полям.
А дальше как и приводил INSERT INTO ... ON DUPLICATE KEY UPDATE...
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху