Group_concat限制1

时间:2012-02-06 15:15:59

标签: mysql magento

这是我的群组查询

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。

我真的不在乎我抓住哪个副标题,我只想要一个,第一个,最小一个,最大一个。不管。

1 个答案:

答案 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。

这让我怀疑你没有告诉我们你真正想要的是什么,因为所显示的查询对于规定的要求来说是戏剧性的过度杀伤。