【问题标题】:How do I get all combinations of data from a MySQL table?如何从 MySQL 表中获取所有数据组合?
【发布时间】:2012-10-09 07:00:03
【问题描述】:

过去五个小时我一直在尝试从表格中获取每个产品选项组合,但我现在完全陷入困境。我有一个表,其中包含(简化)之类的数据:

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

非常感谢任何提示。 :)

【问题讨论】:

  • 您能否在您的声明“Is it possible to do this”中澄清“this”是什么意思?除了CREATE 中的一个小错误之外,您的查询都很好,您可以构建一个大而长的INSERT 查询以一次性添加所有可能的值。我错过了什么吗?
  • 添加预期结果会有所帮助。
  • 你能提供一个你正在尝试做的例子吗?生成assigned_options记录,获取所有可能记录的列表?你的要求有点模糊......
  • @VoidRay +1 一定是我的另一个自我

标签: mysql combinations option product


【解决方案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 个表 valueoption 要提取它们的所有组合?

【讨论】:

  • 这对 mysql 不起作用——或者至少它非常慢
【解决方案2】:
select option_id, value_id
from assigned_options
group by option_id, value_id
order by option_id, value_id

【讨论】:

    【解决方案3】:

    在 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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-08
      • 2022-09-22
      • 2015-08-11
      • 1970-01-01
      相关资源
      最近更新 更多