2014-08-29 96 views
0

我想要一个表或查询两个单独数据集的所有排列,但与规则。2个数据集的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 

这,我做不到,所以如果有人能帮助我,这将是可怕的。我相信,在这个例子中,行数是4,对于64行,功率3(作为驱动程序的作用)。

但是第二部分就是我所说的“规则”。每项工作都会定义可以完成这项工作的司机。

例如招聘1只能通过驱动程序1或3 工作要做2只能通过驱动程序来实现1 等

我在想,如果我做了一个创建表,然后运行删除查询,但我真的很茫然。我想只是使用规则创建查询,以尝试加快速度。

这将最终帮助我通过显示这些作业可以分配的所有方式来为每个作业制定计划。

对不起,因为模糊,但我希望社区可以帮助我在这里。

编辑: 我觉得我的数学可能是错的。据此:combination calculator其中我输入3(司机)选择和4号码选择(工作)顺序是重要的,重复是允许的(不知道那是什么),然后它会产生81.

+0

当前表格布局是必需的 - 或者目前没有,并且结构是Q的一部分? – 2014-08-29 09:55:45

+0

@AxelAmthor嗨,我没有任何表结构。 – user2803146 2014-08-29 09:58:47

+0

@ user2803146。 。 。为什么这是用mysql标记的,如果你不使用数据库? – 2014-08-29 11:16:46

回答

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,但我会用第一种方法。