这是我的群组查询
GROUP_CONCAT(DISTINCT IF(catalog_product_entity_varchar.attribute_id = '134',catalog_product_entity_varchar.value,NULL)) AS 'Subtitle'
该表包含多行,其中134作为属性id。我想要做的就是拉第一个catalog_product_entity_varchar.value WHERE catalog_product_entity_int.attribute_id = 134
完整的SQL如下
SELECT catalog_product_entity.sku AS SKU,
IF(catalog_product_entity_decimal.attribute_id = '67',catalog_product_entity_decimal.value,NULL) AS 'Price',
GROUP_CONCAT(DISTINCT IF(catalog_product_entity_int.attribute_id = '146',catalog_product_entity_int.value,NULL)) AS 'Brand',
GROUP_CONCAT(DISTINCT IF(catalog_product_entity_varchar.attribute_id = '63',catalog_product_entity_varchar.value,NULL)) AS 'Name',
GROUP_CONCAT(DISTINCT IF(catalog_product_entity_varchar.attribute_id = '134',catalog_product_entity_varchar.value,NULL)) AS 'Subtitle'
FROM catalog_product_entity
JOIN catalog_product_entity_decimal ON catalog_product_entity_decimal.entity_id = catalog_product_entity.entity_id
JOIN catalog_product_entity_int ON catalog_product_entity_int.entity_id = catalog_product_entity.entity_id
JOIN catalog_product_entity_varchar ON catalog_product_entity_varchar.entity_id = catalog_product_entity.entity_id
WHERE catalog_product_entity.type_id='simple' AND catalog_product_entity.sku='30020262'
GROUP by catalog_product_entity.entity_id
编辑:尝试让事情更清晰。
我正在提取产品数据。为了简化操作,请尝试忽略大部分查询。我们只关注'sku'和'副标题'。
第一个表catalog_product_entity。我们正在为每种产品提供SKU。还有一个独特的'entity_id'。
当我们想要从另一个名为catalog_product_entity_varchar的表中提取此产品的所有相关详细信息时,我们使用'entity_id'。
属性id指的是您想要的特定信息。 134是副标题,63是名称。还有其他“属性”,每个属性都有一个id。
我使用IF语句允许我将134分配给'subtitle',将63分配给'name'。该表看起来像这样。
entity_id attribute_id store_id value
1 134 0 green, large
1 134 1 green, large
1 134 2 green, large
1 63 0 dakine day hiker bag
1 63 1 dakine day hiker bag
1 63 2 dakine day hiker bag
注意一个产品如何存储3次相同的字幕。这是因为我正在使用的电子商务平台(Magento)允许您为您运行的每个商店存储不同的字幕(一个Magento安装允许多个域共享相同的产品数据库,但具有单独的字幕/描述等)< / p>
我已经使用Group_Concat来获取数据然后使用DISTINCT来确保我只抓取一个副标题。然而,我面临的问题是,大部分时间我的字幕和名称在所有商店中都是完全相同的(所以区别有效)但是当有不同的字幕时,不同的字幕会抓取多个字幕。
说实话,我对MYSQL不太满意,觉得我可能会以某种方式完全省略group_concat,可能使用嵌套的SQL语句。请记住,我们并不总是知道产品将使用哪些商店ID。
我真的不在乎我抓住哪个副标题,我只想要一个,第一个,最小一个,最大一个。不管。
答案 0 :(得分:1)
你说:
该表包含多行,其中146为属性id。我真正想做的就是拉第一个catalog_product_entity_int.value WHERE catalog_product_entity_int.attribute_id = 146。
您所说的内容是通过以下方式实现的:
SELECT Value
FROM Catalog_Product_Entity_Int
WHERE Attribute_ID = 146;
这可能会返回多个值,因此你必须用'first'来定义你的意思;它可以是MIN,MAX,LIMIT 1或其他一些标准。
SELECT MIN(Value) AS Value
FROM Catalog_Product_Entity_Int
WHERE Attribute_ID = 146;
SELECT MAX(Value) AS Value
FROM Catalog_Product_Entity_Int
WHERE Attribute_ID = 146;
SELECT Value
FROM Catalog_Product_Entity_Int
WHERE Attribute_ID = 146
LIMIT 1;
根据您的意思,我认为没有理由加入其他三个表或使用GROUP_CONCAT。
这让我怀疑你没有告诉我们你真正想要的是什么,因为所显示的查询对于规定的要求来说是戏剧性的过度杀伤。