【发布时间】:2018-12-19 23:21:40
【问题描述】:
我有以下项目数据集
项目:
item
i1
i2
i3
i4
属性
item | attribute | attr_group
i1 green color
i2 red color
i1 fancy style
i2 cool style
i4 purple color
i3 red color
i1 REF1 refid
i2 REF2 refid
i3 REF2 refid
i4 REF1 refid
属性组名称
attr | group
a1 color
a2 style
a3 refid
文章:
article_id | title ..
ref1_1
ref1_2
ref2
现在我想用article_id 标识的唯一项目填充表格文章。唯一项定义为具有 refid 的项,该 refid 要么没有属性,要么具有不止一种不同的颜色。
例如ref1 有两个项目(绿色和紫色),因此 ref1 本身不能唯一,但会有 2 个 article_id:ref1_1 和 ref1_2。
带有ref2的item颜色相同,所以只定义了一个article_id。
一个可能的 MySQL 查询如何选择唯一的项目并将它们插入到表文章中?我无法解决这个问题,非常感谢任何帮助。
我最好的尝试看起来像下面的 SQL 查询,但是它只会根据 ref_id 和颜色定义文章,缺少的是具有所有相同颜色的项目。
/* create unique articles */
INSERT
IGNORE INTO articles (article_id, URL, ref_id, cat_id, dial_id)
SELECT CONCAT ( a.value, '-', a2.value) AS article_id,
CONCAT ( cs.name_safe, '-', LOWER(ca.attr_de), '-r', a.value) AS URL,
a.value AS refid,
cs.ID,
a2.value AS color_id
FROM `classifieds_attr` a
INNER JOIN classifieds c ON c.ID = a.cl_id
INNER JOIN cat_names_sub cs ON c.cat_id = cs.ID
INNER JOIN `classifieds_attr` a2 ON c.ID = a2.cl_id
AND a2.attr_group_id = 9
INNER JOIN cat_attr ca ON a2.value = ca.attr_id
WHERE a.attr_group_id = 8
AND cs.cat_main_id = 15
AND a2.value NOT LIKE 'Invalid:%'
GROUP BY refid,color_id
【问题讨论】:
-
StackOverflow 不是免费的编码服务。所以希望你try to solve your own problem first。请更新您的问题以在minimal reproducible example 中显示您已经尝试过的内容。如需更多信息,请参阅How to Ask,并拨打tour :)
-
我不明白 attr 列的意义
-
@Barmar 感谢您的反馈,这是一项相当复杂的任务,我眼中的困难在于我卡住的逻辑,并希望从更有经验的开发人员那里获得一些帮助或输入。我已经为这个问题添加了我最好的镜头。
-
有很多关于编写 SQL 查询来处理这样的属性值表的问题。您可能无法找到直接回答您问题的答案,但您应该学习使用它们的一般技巧。然后,您应用您的编程专业知识来为您的特定问题提出解决方案。这就是编程——这是一个创造性的过程,而不是“用数字绘画”。