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 来创建一个循环函数来获得每一种可能性,但我就是无法让它工作。

非常感谢任何提示。:)

4

3 回答 3

1
select option_id, value_id
from assigned_options
group by option_id, value_id
order by option_id, value_id
于 2012-10-18T18:28:08.683 回答
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 过滤掉重复的结果。

您是否还有 2 个其他表value并且option您想要提取所有组合?

于 2012-10-18T18:21:41.963 回答
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;
于 2015-09-22T13:41:04.330 回答