2013-11-18 5 views
1

Я хочу сделать запрос непосредственно в базе данных Magento в MySQL, но он дает мне дубликаты. Не могли бы вы мне помочь?Duplicates in MySQL query

SELECT DISTINCT 
`catalog_product_entity`.`sku` 
, `catalog_product_flat_1`.`name` 
, `catalog_product_entity_text`.`value` AS `description` 
, `catalog_product_flat_1`.`url_key` 
, `catalog_product_flat_1`.`small_image` 
, `catalog_product_flat_1`.`price` 
, `catalog_product_flat_1`.`special_price` 
, `catalog_product_flat_1`.`designer_value` 
, `catalog_product_flat_1`.`color_value` 
FROM 
`ac_magento_gold`.`catalog_product_flat_1` 
INNER JOIN `ac_magento_gold`.`catalog_product_entity` 
    ON (`catalog_product_flat_1`.`entity_id` = `catalog_product_entity`.`entity_id`) AND (`catalog_product_entity`.`sku` = `catalog_product_flat_1`.`sku`) AND (`catalog_product_flat_1`.`sku` NOT REGEXP '(SZ|SIZE|GIFT)') 
INNER JOIN `ac_magento_gold`.`catalog_product_entity_text` 
    ON (`catalog_product_entity_text`.`entity_id` = `catalog_product_entity`.`entity_id`) AND (`catalog_product_entity_text`.`attribute_id`= 61) 
INNER JOIN `ac_magento_gold`.`cataloginventory_stock_item` 
    ON (`cataloginventory_stock_item`.`product_id` = `catalog_product_entity`.`entity_id`) AND (`cataloginventory_stock_item`.`product_id` = `catalog_product_flat_1`.`entity_id`) AND (`catalog_product_entity_text`.`entity_id` = `cataloginventory_stock_item`.`product_id`) AND (`cataloginventory_stock_item`.is_in_stock = 1) LIMIT 6; 
+0

Duplicates * как *? Тот же «sku», то же «имя»? С ключевым словом 'DISTINCT' вы предотвращаете дублирование всей строки, а не отдельные поля внутри строки. Какие данные вы получаете и чего ожидаете/хотите? – newfurniturey

ответ

1

Если у вас несколько веб-сайтов или магазинов (или даже Stock_id), это может быть причиной получения дубликатов. Вам необходимо указать соответствующие файлы store_id или website_id или stock_id в ваших объединениях.

Например,

INNER JOIN `ac_magento_gold`.`catalog_product_entity_text` 
ON (`catalog_product_entity_text`.`entity_id` = `catalog_product_entity`.`entity_id`) 
AND (`catalog_product_entity_text`.`attribute_id`= 61) 

должен быть

INNER JOIN `ac_magento_gold`.`catalog_product_entity_text` 
ON (`catalog_product_entity_text`.`entity_id` = `catalog_product_entity`.`entity_id`) 
AND (`catalog_product_entity_text`.`attribute_id`= 61) 
AND `catalog_product_entity_text`.`store_id` = 0 

или независимо от вашего store_id есть. На самом деле, запрос делает даже больше смысла (для меня по крайней мере) с Скобки переставить следующим образом:

INNER JOIN `ac_magento_gold`.`catalog_product_entity_text` 
ON (
`catalog_product_entity_text`.`entity_id` = `catalog_product_entity`.`entity_id` 
AND `catalog_product_entity_text`.`attribute_id`= 61 
AND `catalog_product_entity_text``.store_id` = 0 
) 

Вы также, возможно, придется переписать следующим образом:

INNER JOIN `ac_magento_gold`.`cataloginventory_stock_item` 
ON (`cataloginventory_stock_item`.`product_id` = `catalog_product_entity`.`entity_id`) 
AND (`cataloginventory_stock_item`.`product_id` = `catalog_product_flat_1`.`entity_id`) 
AND (`catalog_product_entity_text`.`entity_id` = `cataloginventory_stock_item`.`product_id`) 
AND (`cataloginventory_stock_item`.is_in_stock = 1) 

к:

INNER JOIN `ac_magento_gold`.`cataloginventory_stock_item` 
ON (`cataloginventory_stock_item`.`product_id` = `catalog_product_entity`.`entity_id` 
AND `cataloginventory_stock_item`.`product_id` = `catalog_product_flat_1`.`entity_id` 
AND `catalog_product_entity_text`.`entity_id` = `cataloginventory_stock_item`.`product_id` 
AND `cataloginventory_stock_item`.is_in_stock = 1 
AND `cataloginventory_stock_item`.`stock_id` = 1) 

еще раз, в зависимости от того, с каким знаком stock_id вас интересует. Насколько мне известно, каталог_product_entity содержит только один из каждого entity_id, поэтому не нужно указывать ни один из параметров site_id, store_id или stock_id. Я также считаю, что catalog_product_flat_1 специфичен для одного store_id или website_id или что-то в этом роде, но я не уверен.

+0

Привет, Фил Ли, Большое спасибо за вашу помощь. Ваше решение работало как прелесть. Вот код для дальнейшего использования. – user3005677

+0

SELECT DISTINCT catalog_product_entity.sku, catalog_product_flat_1.name, catalog_product_entity_text.value, catalog_product_flat_1.url_key, catalog_product_flat_1.small_image, catalog_product_flat_1.price, catalog_product_flat_1.special_price, catalog_product_flat_1.designer_value, catalog_product_flat_1.color_value, catalog_product_flat_1.short_description ОТ ac_magento_gold.catalog_product_flat_1 INNER JOIN ac_magento_gold. catalog_product_entity ON (catalog_product_flat_1.entity_id = catalog_product_entity.entity_id) – user3005677

+0

И (catalog_product_entity.sku = catalog_product_flat_1.sku) И (catalog_product_flat_1.sku НЕ REGEXP '(SZ | РАЗМЕР | ДАР)') INNER JOIN ac_magento_gold.catalog_product_entity_text ON (catalog_product_entity_text.entity_id = catalog_product_entity.entity_id И catalog_product_entity_text.attribute_id = 61 И catalog_product_entity_text.store_id = 1) – user3005677