2014-08-29 2 views
0

두 개의 개별 데이터 세트의 모든 순열에 대해 mysql에서 테이블 또는 쿼리를 원하지만 규칙이 필요합니다.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 

이것은 할 수 없기 때문에 누군가가 나를 도와 줄 수 있다면 정말 좋을 것입니다. 나는이 예제의 행 수가 64 행인 3의 힘 (작업자의 힘)에 4라고 생각한다.

하지만이 두 번째 부분은 내가 "규칙"이라고 부르는 부분입니다. 각 작업에는 작업을 수행 할 수있는 드라이버가 정의되어 있습니다. 예를 들어 작업의 경우 1

에만 2 만 드라이버에 의해 수행 할 수 있습니다 드라이버 1 또는 3 작업하여 수행 할 수 있습니다 1. 등

내가 다음 쿼리를 삭제 실행, 내가 한 경우 테이블을 만드는 것이 생각 ,하지만 정말 실망입니다. 나는 규칙을 사용하여 쿼리를 작성하여 속도를 높이기 위해 시작하려고합니다.

이렇게하면 결국 이러한 작업을 할당 할 수있는 모든 방법을 보여줌으로써 각 작업에 대한 계획을 세우는 데 도움이됩니다.

막연한 데 죄송합니다.하지만 커뮤니티가 나를 도와 줄 수 있기를 바랍니다.

편집 : 내 수학이 잘못되었을 수 있다고 생각합니다. 이에 따르면 : combination calculator 내가 3을 선택하여 (드라이버) 선택한 4 개의 숫자 (작업) 순서가 중요하며 반복이 허용됩니다 (그게 무엇인지는 확실하지 않음). 그러면 81이 생성됩니다.

+0

현재 테이블 레이아웃이 필요합니까 - 아니면 현재 없으며 구조가 Q의 일부입니까? –

+0

@AxelAmthor 안녕하세요, 어떤 테이블 구조가 없습니다. – user2803146

+0

@ user2803146 . . 데이터베이스를 사용하지 않는다면 왜 mysql에 태그가 붙어 있습니까? –

답변

0

확실하지 않지만 냄새 숙제처럼, 그녀의 내 두 센트 :

job_id|job_name 

다음, 테이블을 설정 drivers과 :

driver_id|driver_name 

설치 작업 jobs 하나 개의 테이블

이제 우리는지도에 필요

먼저 "규칙"작업 할 수있는 드라이버, job_capabilities이 각각 할당 작업 => 드라이버, 조합에 대해 하나 개의 행을 포함

driver_id|job_id 

(job_id, driver_id)은 고유해야합니다. 한 명의 운전자는 특정 직업을 한 번만 할 수 있습니다. 그래서,

driver_id|job_id 

실제로는 동일한 레이아웃을 가지고 있지만 주어진 시간 동안 하나의 드라이버가 실제로 하나 개의 작업 만 작업 할 수 있습니다 (여기없는) :

두 번째 맵은 할당 자체 assigned_jobs을 포함 driver_id이며 날짜 - 시간은 고유해야합니다. 지금 명료성을 위해 건너 뛰었습니다.우리는 단지

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

은 아마 ON DUPLACET KEY UPDATE ... 절에 의해 강화와 assigned_jobs에 삽입 할 것을 사용할 수

이제 우리는

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; 

같은 SQL을 구성 할 수 있습니다.

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,하지만 난 사용하는 것이 첫 번째 방법 :

이제 할당 된 작업을 얻으려면, 우리는 그 문을 조금 변경할 수 있습니다.

관련 문제