Magento: какой catalog_product_flat мне нужно выбрать? а что такое таблица catalog_product_entity_datetime?

Чтобы узнать, кто является клиентами, которым необходимо отправить уведомление по электронной почте, и узнать, какие продукты остались за 2 часа до истечения срока действия сделки, мне нужно выбрать из списка желаний, списка желаний, таблицы 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
Вы можете найти имя таблицы в соответствующем объекте magento: $this-›getTable('catalogrule/rule_product_price'); если вы начинаете с коллекции продуктов, вам не нужно знать имя таблицы продуктов, вы можете использовать «main_table» вместо имени таблицы продуктов. - person Anda B; 18.10.2010

Структура данных каталога продуктов Magento реализует модель Entity-Attribute-Value. Вам нужно прочитать о EAV (ссылка Википедия), а затем обратиться к Magento < href="http://www.magentocommerce.com/wiki/2_-_magento_concepts_and_architecture/magento_database_diagram#the_magento_eav_data_model" rel="nofollow">диаграммы баз данных.

person Jonathan Day    schedule 15.10.2010
comment
Я также нашел эти статьи полезны в качестве отправной точки. - person clockworkgeek; 15.10.2010

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

Мне нужно вытащить номер кошки в корзине, чтобы запустить логическое событие. Плоские таблицы кажутся ненадежными ИМХО. Flats представлены для производительности, и я не понимаю, как Mage их использует, и в целом мне все равно.

Прибавьте к этому подавляющее радикальное изменение каждого обновления БД, шаблона, всего - становится страшно.

Итак, вот 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 — плохой моджо.

Итак, отвечая на исходный вопрос - это такие запросы, где вы можете начать объединять свою собственную информацию для конкретных нужд в файле flats/cache. К счастью, таблицы вроде как помечены, чтобы помочь. Задача не из легких — и не невыполнимая. Я рекомендую использовать различные MVC/подобные функции, когда это возможно.

Ваше здоровье!

Обновление: кажется, что плоская таблица # - это номер магазина (да). Он должен соответствовать # в uri, например

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

был бы стол flat2.

person datamafia    schedule 30.03.2011