mysql - 组连接限制 1

标签 mysql magento

这是我的组连接查询

GROUP_CONCAT(DISTINCT IF(catalog_product_entity_varchar.attribute_id = '134',catalog_product_entity_varchar.value,NULL)) AS 'Subtitle'

该表包含多行,属性 id 为 134。我真的只想拉第一个 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 分配给“副标题”,将 63 分配给“名称”。表格看起来像这样。

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 安装允许多个域共享相同的产品数据库,但有单独的副标题/描述等)

我使用 Group_Concat 来抓取数据,然后使用 DISTINCT 来确保我只抓取一个字幕。然而,我面临的问题是,大多数时候我的字幕和名称在所有商店中都完全相同(因此 Distinct 有效)但是当有不同的字幕时,distinct 将获取多个字幕。

老实说,我对 MYSQL 不是很好,我觉得我可能会以某种方式完全忽略 group_concat,也许使用嵌套的 SQL 语句。请记住,我们并不总是知道产品将使用的商店 ID。

我真的不在乎我抓取哪个字幕,我只想要一个,第一个,最小的,最大的。随便。

最佳答案

你说:

The table contains multiple rows with 146 as the attribute id. Really all I want to do is pull the first catalog_product_entity_int.value WHERE catalog_product_entity_int.attribute_id=146.

你说你想要的是通过以下方式实现的:

SELECT Value
  FROM Catalog_Product_Entity_Int
 WHERE Attribute_ID = 146;

这可能会返回多个值,因此您必须定义“第一个”的含义;它可以是 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。

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

关于mysql - 组连接限制 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9162286/

相关文章:

php - SQL : How to overwrite entry only if new one is higher? 否则创建新条目

php - 类似对话的消息系统

php - 脚本生成多个描述而不是一个

mysql - 如何在 WAMP 本地主机上上传 Magento 1.9 sql 文件

Magento CMS 页面(或 block )批量导入

mysql - 将 2 个具有 2 个结果的选择查询连接到一个具有 1 个结果的查询中?

mysql - 求和到某个点 - MySql

Magento "Forgot Password"电子邮件以错误的语言发送

php - 如何解决连接到 connect20.magentocommerce.com :443 的未知 SSL 协议(protocol)错误

mysql - 无法使用mysql设置grafana模板