【问题标题】:Mysql combinations for 2 data sets2个数据集的Mysql组合
【发布时间】:2014-08-29 09:50:31
【问题描述】:

我想在 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 的 3 次方(工作的驱动程序的幂),即 64 行。

但第二部分就是我所说的“规则”。每个工作都将定义可以完成工作的驱动程序。

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

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

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

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

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

【问题讨论】:

  • 需要当前表格布局 - 或者目前没有表格布局并且结构是 Q 的一部分?
  • @AxelAmthor 嗨,我没有任何表结构。
  • @user2803146 。 . .如果你不使用数据库,为什么用 mysql 标记?
  • 好的,所以这实际上不是与数据库相关的问题,而是或多或少有关基本数据结构的问题。什么编程语言?这是为了在这里至少得到一些答案的基本要求?
  • @GordonLinoff 这是使用作业数据的 mysql 数据库,以及驱动程序等。结构并不重要,因为我可以更改表格和输入法以适应任何人必须实现这一目标的任何解决方案或想法。

标签: mysql data-structures combinations permutation


【解决方案1】:

虽然方式不清楚并且闻起来像家庭作业,但她是我的两分钱:

设置一个带有作业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,但我将使用的第一种方法。

【讨论】:

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