2个数据集的Mysql组合

时间:2014-08-29 09:50:32

标签: mysql data-structures combinations permutation

我想在mysql中使用两个单独数据集的所有排列的表或查询,但是有规则。

我有一张工作表和一张司机表。

我想为驱动程序生成所有作业组合的表或查询。每个工作必须有一个驱动程序,但每个驱动程序不一定需要一个工作。像这样: 在这个例子中,我有4个工作和3个驱动程序。

Job1 | Job2 | Job3 | Job4
 1      1      1      1
 1      1      1      2
 1      1      1      3
 1      1      2      1
 1      1      3      1

这个,我不能这样做,所以如果有人可以帮助我那将是非常棒的。我相信这个例子中的行数是功率3(作为驱动器功率的作业)的行数是64行。

但第二部分是我称之为“规则”。每个作业都会定义可以完成工作的驱动程序。

例如,作业1只能由驱动程序1或3完成。 作业2只能由驾驶员1完成。 等

我在想,如果我做了一个创建表,然后运行删除查询,但我真的很茫然。我想创建查询使用规则开始,以试图加快它。

这最终将帮助我通过展示分配这些工作的所有方式为每项工作制定计划。

抱歉模糊不清,但我希望社区可以帮助我。

编辑: 我想我的数学可能是错的。根据这个:combination calculator我输入3来选择(驱动程序)和4个选择的数字(工作)顺序是重要的,允许重复(不确定是什么)然后它产生81。

1 个答案:

答案 0 :(得分:0)

虽然不清楚,闻起来像家庭作业,她的我的两分钱:

使用作业jobs设置一个表:

job_id|job_name

接下来,设置一个包含drivers的表格:

driver_id|driver_name

现在我们需要映射:

首先是"规则",能够创造工作的司机job_capabilities

driver_id|job_id

这将包含每个作业的一行=>驱动程序,组合(job_id, driver_id)应该是唯一的 - 一个驱动程序只能执行一次特定的工作。

第二张地图包含作业本身assigned_jobs

driver_id|job_id

实际上它具有相同的布局,但是对于给定的时间段(这里缺少),一个驱动程序实际上只能在一个作业上工作,因此driver_id和日期时间应该是唯一的。现在为了清楚而跳过了。

现在我们可以构建一个像

这样的SQL
  SELECT job_capabilities.driver_id, job.job_id from jobs, job_capabilities
     where job.job_id = job_capabilities.job_id
               AND job.job_id = 42;

我们可以使用它来插入assigned_jobs

  INSERT INTO assigned_jobs .... (Select from above) ...

可能由ON DUPLACET KEY UPDATE ...子句增强。

现在要获得分配的作业,我们可以稍微改变一下这个陈述:

  SELECT assigned_jobs.driver_id, drivers.driver_name, job.job_id, job.job_name 
     from drivers, jobs, assigned_jobs
       where job.job_id = assigned_jobs.job_id
            AND drivers.driver_id = assigned_jobs.driver_id
               AND job.job_id = 42;

这未经过测试,可能不是有效的SQL,而是我将使用的第一种方法。