Magento: от кой catalog_product_flat трябва да избера? и какво е таблица catalog_product_entity_datetime?

За да знам кои са клиентите, на които трябва да бъде изпратен имейл с известие, и да знам кои продукти остават 2 часа преди изтичането на сделката, трябва да избера от списък с желания, wishlist_item, customer_entity и catalog_product_enity таблица, които трябва да се присъединят към catelog_product_flat_X Но има много catelog_product_flat_X таблици (X има от 1 до 64) Как да разбера към коя таблица трябва да се присъединя?

Ето структурата на таблицата catalog_product_flat, която има полета "special_to_date" и "visibility", от които се нуждая

CREATE TABLE `catalog_product_flat_1` (
`entity_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`attribute_set_id` smallint(5) unsigned NOT NULL DEFAULT '0',
`type_id` varchar(32) NOT NULL DEFAULT 'simple',
`cost` decimal(12,4) DEFAULT NULL,
`created_at` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`enable_googlecheckout` tinyint(1) DEFAULT NULL,
`has_options` smallint(6) NOT NULL DEFAULT '0',
`image_label` varchar(255) DEFAULT NULL,
`links_exist` int(11) DEFAULT NULL,
`links_purchased_separately` int(11) DEFAULT NULL,
`links_title` varchar(255) DEFAULT NULL,
`name` varchar(255) DEFAULT NULL,
`news_from_date` datetime DEFAULT NULL,
`news_to_date` datetime DEFAULT NULL,
`price` decimal(12,4) DEFAULT NULL,
`price_type` int(11) DEFAULT NULL,
`price_view` int(11) DEFAULT NULL,
`required_options` tinyint(3) unsigned NOT NULL DEFAULT '0',
`shipment_type` int(11) DEFAULT NULL,
`short_description` text,
`sku` varchar(64) DEFAULT NULL,
`sku_type` int(11) DEFAULT NULL,
`small_image` varchar(255) DEFAULT NULL,
`small_image_label` varchar(255) DEFAULT NULL,
`special_from_date` datetime DEFAULT NULL,
`special_price` decimal(12,4) DEFAULT NULL,
`special_to_date` datetime DEFAULT NULL,
`tax_class_id` int(11) DEFAULT NULL,
`thumbnail` varchar(255) DEFAULT NULL,
`thumbnail_label` varchar(255) DEFAULT NULL,
`updated_at` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`url_key` varchar(255) DEFAULT NULL,
`url_path` varchar(255) DEFAULT NULL,
`visibility` tinyint(3) unsigned DEFAULT NULL,
`weight` decimal(12,4) DEFAULT NULL,
`weight_type` int(11) DEFAULT NULL,
PRIMARY KEY (`entity_id`),
KEY `IDX_TYPE_ID` (`type_id`),
KEY `IDX_ATRRIBUTE_SET` (`attribute_set_id`),
KEY `IDX_NAME` (`name`),
KEY `IDX_PRICE` (`price`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Ето catalog_product_entity, който мога да знам идентификатора на продукта (entity_id)

CREATE TABLE `catalog_product_entity` (
`entity_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`entity_type_id` smallint(8) unsigned NOT NULL DEFAULT '0',
`attribute_set_id` smallint(5) unsigned NOT NULL DEFAULT '0',
`type_id` varchar(32) NOT NULL DEFAULT 'simple',
`sku` varchar(64) DEFAULT NULL,
`has_options` smallint(1) NOT NULL DEFAULT '0',
`required_options` tinyint(1) unsigned NOT NULL DEFAULT '0',
`created_at` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`updated_at` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`entity_id`),
KEY `FK_CATALOG_PRODUCT_ENTITY_ENTITY_TYPE` (`entity_type_id`),
KEY `FK_CATALOG_PRODUCT_ENTITY_ATTRIBUTE_SET_ID` (`attribute_set_id`),
KEY `sku` (`sku`)
) ENGINE=InnoDB AUTO_INCREMENT=50 DEFAULT CHARSET=utf8 COMMENT='Product Entities';

и какво е таблица catalog_product_entity_datetime? Виждам, че също съхранява същата стойност за стойността на special_to_date в полето за стойност

CREATE TABLE `catalog_product_entity_datetime` (
`value_id` int(11) NOT NULL AUTO_INCREMENT,
`entity_type_id` smallint(5) unsigned NOT NULL DEFAULT '0',
`attribute_id` smallint(5) unsigned NOT NULL DEFAULT '0',
`store_id` smallint(5) unsigned NOT NULL DEFAULT '0',
`entity_id` int(10) unsigned NOT NULL DEFAULT '0',
`value` datetime DEFAULT NULL,
PRIMARY KEY (`value_id`),
UNIQUE KEY `IDX_ATTRIBUTE_VALUE` (`entity_id`,`attribute_id`,`store_id`),
KEY `FK_CATALOG_PRODUCT_ENTITY_DATETIME_ATTRIBUTE` (`attribute_id`),
KEY `FK_CATALOG_PRODUCT_ENTITY_DATETIME_STORE` (`store_id`),
KEY `FK_CATALOG_PRODUCT_ENTITY_DATETIME_PRODUCT_ENTITY` (`entity_id`)
) ENGINE=InnoDB AUTO_INCREMENT=11873 DEFAULT CHARSET=utf8;

Моля, помогнете ми как да го направя.

Благодаря предварително, Рити


person Rithy    schedule 15.10.2010    source източник


Отговори (3)


Трябва да използвате методи за каталог/продукт на magento за това, а не необработена sql заявка. така че започнете от Mage::getModel('catalog/product')->getCollection() и добавяйте обединения, докато получите данните, които искате; таблиците catalog_flat и всяка друга таблица са предназначени само за вътрешно използване от magento. плоските таблици са създадени от magento от целите на ефективността на EAV схемата.

person Anda B    schedule 15.10.2010
comment
Страхотен отговор! Благодаря ти!. И така, не е необходимо да се присъединявам с плоска маса и коя е таблицата, която мога да използвам за присъединяване? - person Rithy; 18.10.2010
comment
Можете да намерите името на таблицата от съответния магенто обект: $this-›getTable('catalogrule/rule_product_price'); ако започнете от продуктовата колекция, не е нужно да знаете името на продуктовата таблица, можете да използвате „main_table“ вместо името на продуктовата таблица. - person Anda B; 18.10.2010

Структурата на каталожните продуктови данни на Magento прилага модела Entity-Attribute-Value. Трябва да прочетете за EAV (ref Wikipedia), след което се консултирайте с Magento диаграми на бази данни.

person Jonathan Day    schedule 15.10.2010
comment
Намерих също тези статии полезни като отправна точка. - person clockworkgeek; 15.10.2010

Включвам се, това може да помогне на други, затова исках да добавя някои бележки.

Трябва да изтегля котки # в количката, за да задействам събитие bool. Плоските маси изглеждат ненадеждни IMHO. Плоските са представени за изпълнение и нямам представа как ги използва Mage и като цяло не ме интересува.

Комбинирайте това с огромните радикални промени, всяка актуализация на DB, шаблон, всичко - става страшно.

Ето 2 въпроса, върху които да помислите.

# get basic product ID from the sku (via something like this : $_item->getSku() ) - returns ID = 122 in my case
select entity_id from `magento_store`.`catalog_product_entity` where sku = 'THE_SKU';

## Use that value to tie to the cat index as such:
SELECT * FROM `magento_store`.`catalog_category_product_index` where product_id = 122; # returns 61 and 62 in my case, the matching cat id #s in the admin.

Помислете за присъединяване, разбира се.

Така че в този пример върнатото entity_id е идентификаторът на продукта, а category_id е номерът на котката. Използвам 1.4.1 в момента.

Бъдете много внимателни, открих злонамерени грешки в основната система. Magento е лошо моджо.

И така, стигаме до първоначалния въпрос - това са заявки като тази, при които можете да започнете да обединявате собствената си информация заедно за специфични нужди под плоските/кеша. За щастие масите са надписани, за да помогнат. Не е лесна задача - не е и невъзможна. Препоръчвам да използвате carious MVC/подобна функционалност, когато можете.

наздраве!

Актуализация: Появява се плоската таблица # е номерът на магазина (да). Трябва да съвпада с # в uri, като например

index.php/admin/catalog_product/index/store/2/

би било плоска2 маса.

person datamafia    schedule 30.03.2011