如何从MySQL表中获取所有数据组合?

3

我已经花费了最近五个小时的时间尝试从表格中获取每种产品选项的组合,但现在完全卡住了。我有一个带有数据的表格(简化版如下):

CREATE TABLE `assigned_options` (
  `option_id` int(10) unsigned NOT NULL DEFAULT '0',
  `value_id` int(10) unsigned NOT NULL DEFAULT '0',
);

INSERT INTO `assigned_options` (`value_id`, `option_id`) VALUES
(4, 2),
(3, 2),
(2, 1),
(1, 1),
(5, 3),
(6, 3),
(7, 3);

假设选项ID 2为颜色,具有红色(4)和蓝色(3)等变体,选项ID 1为尺寸等......

是否可能使用一个MySQL查询来完成这个任务?我已经尝试使用PHP创建一个递归函数来获取每个可能性,但是我无法使其正常工作。

非常感谢任何提示。 :)


你能澄清一下你在说“这个”时是指什么吗?你的查询除了CREATE中的一个小错误外都很好,你可以构建一个大而长的INSERT查询来一次性添加所有可能的值。我有什么遗漏吗? - Grzegorz
2
添加一个期望结果会更有帮助。 - Void Ray
你能提供一个你试图做的示例吗?生成指定的选项记录,获取所有可能的记录列表?你要求的有点模糊... - Ray
@VoidRay +1 必须是我的分身。 - Ray
3个回答

1

根据你的表格... 我猜想你想要每个值和选项的所有可能组合。这就是交叉连接(没有任何ON或WHERE子句限制结果的连接):

 SELECT a.value_id, b.option_id 
     FROM assigned_options a 
     JOIN assigned_options b 
     GROUP BY a.value_id, b.option_id 

Group by 过滤掉重复的结果。

您是否有另外两个表 valueoption,想要提取所有组合?


这对于mysql不起作用 - 或者至少非常慢 - ChiMo

1
select option_id, value_id
from assigned_options
group by option_id, value_id
order by option_id, value_id

0
在TSQL中,您可以使用递归CTE,我记不清我从哪里得到的了,但非常好用。需要注意的是,MYSQL不使用"With"选项,因此无法在MySQL中使用。
WITH Numbers(N) AS (
                    SELECT N
                    FROM ( VALUES(1), (2), (3), (4), (5), (6)) Numbers(N)),
                        Recur(N,Combination) AS (
                        SELECT N, CAST(N AS VARCHAR(20)) 
                        FROM Numbers


UNION ALL

SELECT n.N,CAST(r.Combination + ',' + CAST(n.N AS VARCHAR(10)) AS VARCHAR(20)) 
FROM Recur r
INNER JOIN Numbers n ON n.N > r.N)



select Combination
from RECUR
ORDER BY LEN(Combination),Combination;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接