【问题标题】:How do I make combinations from data inside database如何从数据库中的数据进行组合
【发布时间】:2015-02-07 19:05:20
【问题描述】:

我想知道如何将数据库中数据的所有可能性组合起来。

第 1 项、第 2 项、第 3 项、第 4 项和第 5 项

可以有任意数量的项目,我想做的是显示所有组合,然后能够操作它们,要么删除一行,要么将它们变成更多的 3、4 等项目的组合。

例如。 数据库名称“存储” 表名“项目”

ItemID        Item  
1             Item1  
2             Item2
3             Item3
4             Item4
5             Item5

以下是 2 项组合的示例,我想将它们组合成 3 项组合。这是用于php编程的。

Item1,Item2  
Item1,Item3  
Item1,Item4  
Item1,Item5  
Item2,Item3  
Item2,Item4  
Item2,Item5  
Item3,Item4  
Item3,Item5  
Item4,Item5  

【问题讨论】:

    标签: php logic


    【解决方案1】:

    你需要去自我加入

    这是在 T-SQL 中

    在 mysql 中也应该可以工作

    select t1.Item+','+t2.Item from item t1 join item t2 on t1.ItemID <t2.ItemID order by t1.ItemID,t2.ItemID
    

    【讨论】:

      【解决方案2】:

      根据您拥有的项目数量,一些嵌套的 foreach 循环可能会解决问题:

      $arrItems = array("Item1","Item2","Item3",...,"ItemN");
      
      foreach ($arrItems as $v1) {
        foreach($arrItems as $v2) {
          echo $v1 . "," . $v2;
        }
      }
      

      您拥有的配对数对应于您嵌套的循环数。其他人可能能够提供带有n 嵌套的迭代算法,而无需对嵌套循环进行硬编码。

      【讨论】:

        【解决方案3】:

        您需要使用 SQL 交叉连接。您可以设置另一个相同的表或创建一个临时表,然后在您希望交叉连接的属性上交叉连接您的两个表。 select b.item, d.item from itemtable1 b cross join (select * from itemtable2) d

        【讨论】:

          猜你喜欢
          • 2019-02-09
          • 2016-04-07
          • 2020-06-12
          • 2021-05-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多