Magento:我需要选择哪个catalog_product_flat?什么是catalog_product_entity_datetime表?

时间:2010-10-15 03:57:02

标签: magento data-modeling entity-attribute-value

要知道需要发送通知邮件的客户是谁,并且知道在交易到期前2小时仍有产品, 我需要从wishlist,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,我可以知道产品的ID(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;

请帮我怎么做。

先谢谢了, Rithy

3 个答案:

答案 0 :(得分:2)

您应该为此使用magento目录/产品方法,而不是原始SQL查询。 所以从Mage :: getModel('catalog / product') - > getCollection()开始,添加连接直到得到你想要的数据; catalog_flat表和任何其他表仅供magento内部使用。 平面表由magento根据EAV架构性能目的创建。

答案 1 :(得分:1)

Magento的目录产品数据结构实现了 Entity-Attribute-Value 模型。您需要阅读EAV(参考Wikipedia),然后咨询Magento database diagrams

答案 2 :(得分:1)

Chiming in,这可能有助于其他人,所以我想做一些笔记。

我需要在购物车中拉猫#来触发bool事件。平板表似乎不可靠恕我直言。平底鞋是为了表现而呈现的,我不知道Mage如何使用它们,并且一般不关心。

具有压倒性激进的化合物改变了数据库,模板,一切的每个更新 - 它变得可怕。

所以这里有两个要考虑的问题。

# 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是产品ID,而category_id是cat#。现在使用1.4.1。

要非常小心我在核心系统中发现了恶意错误。 Magento是坏人。

所以点击原始问题 - 这是一个类似的查询,你可以开始加入你自己的信息,以满足单位/缓存下的特定需求。幸运的是,桌子有点标记可以提供帮助。这不是一件容易的事 - 也不是不可能的。我建议你尽可能使用龋齿的MVC /类似功能。

干杯!

更新:出现平面表#是商店编号(duh)。它应匹配uri中的#,如

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

woudl be flat2 table。