2017-02-22 2 views
0

도움말 알고리즘을 제안하십시오. 두 개 이상의 매개 변수가있는 복잡한 샘플을 만들지는 않겠습니다.유연한 데이터 필터

문제는 테이블에 item1 or item2을 포함 할 수있는 필드가 있지만 두 개의 필수 인수가 있고이 두 알고리즘 사이에 알고리즘이 있어야하지만 다른 노드에 적합 할 수 있어야합니다. 동일한 데이터 세트의 기준

제발 도와주세요,이 시점에서 붙어 있습니다. 기준에 따라 찾기 나는 어려움을 겪고 있습니다. 예를 들어, 데이터 및 결과를

: 순간 enter image description here

나는 세 개의 테이블이 있습니다

  1. 분야를;
  2. 전문화;
  3. Discipline_specializations. 제발 도와주세요이

    +-----------+ +---------------+ +---------------------------------------------------+ 
    |disciplines| |specializations| |    discipline_specializations   | 
    +----+------+ +---------------+ +----+---------------+-------------------+----------+ 
    | id | name | | id | name | | id | discipline_id | specialization_id | priority | 
    +----+------+ +----+----------+ +----+---------------+-------------------+----------+ 
    

    같이

, 나는 그것을 구현하는 방법을 단순히 아무 생각이 없습니다.
감사합니다.

답변

0

여기에는 두 가지 문제가있는 것으로 보입니다.

첫째는 데이터를 저장하는 것입니다. item3 or item4은 정규화되었으므로 동일한 우선 순위를 가진 분야를 분리해야합니다 (예를 이해했다면).

+---------------------------------------------------+ 
|    discipline_specializations   | 
+----+---------------+-------------------+----------+ 
| id | discipline_id | specialization_id | priority | 
+----+---------------+-------------------+----------+ 
| 1 | item1   | object1   |  1 | 
+----+---------------+-------------------+----------+ 
| 2 | item2   | object1   |  2 | 
+----+---------------+-------------------+----------+ 
| 3 | item3   | object1   |  3 | 
+----+---------------+-------------------+----------+ 
| 4 | item4   | object1   |  3 | 
+----+---------------+-------------------+----------+ 
| 5 | item5   | object2   |  1 | 
+----+---------------+-------------------+----------+ 
| 6 | item4   | object2   |  2 | 
+----+---------------+-------------------+----------+ 
| 7 | item2   | object2   |  3 | 
+----+---------------+-------------------+----------+ 
| 8 | item1   | object2   |  3 | 
+----+---------------+-------------------+----------+ 
| 9 | item1   | object3   |  1 | 
+----+---------------+-------------------+----------+ 
| 10 | item3   | object3   |  2 | 
+----+---------------+-------------------+----------+ 
| 11 | item6   | object3   |  3 | 
+----+---------------+-------------------+----------+ 
| 12 | item5   | object3   |  3 | 
+----+---------------+-------------------+----------+ 
| 13 | item2   | object4   |  1 | 
+----+---------------+-------------------+----------+ 
| 14 | item1   | object4   |  2 | 
+----+---------------+-------------------+----------+ 
| 15 | item4   | object4   |  1 | 
+----+---------------+-------------------+----------+ 
| 16 | item5   | object4   |  1 | 
+----+---------------+-------------------+----------+ 

두 번째 문제는 쿼리입니다. 당신이 찾고있는 것은 모든 필요한 분야의 전문화입니다. MySQL에는 INTERSECT 연산자가 없지만 IN 문과 유사하게 사용할 수 있습니다. 그래서 한 분야와 일치하는 전문을 찾을 수있는 쿼리 것 ...

select * from specializations s 
where s.specialization_id in (select ds.specialization_id 
           from discipline_specializations ds 
           where ds.discipline_id = 'item1') ; 

그리고 이것은

select * from specializations s 
where s.specialization_id in (select ds.specialization_id 
           from discipline_specializations ds 
           where ds.discipline_id = 'item1') 
and s.specialization_id in (select ds.specialization_id 
           from discipline_specializations ds 
           where ds.discipline_id = 'item2') 
and s.specialization_id in (select ds.specialization_id 
           from discipline_specializations ds 
           where ds.discipline_id = 'item3') 
and s.specialization_id in (select ds.specialization_id 
           from discipline_specializations ds 
           where ds.discipline_id = 'item4') 
; 
+0

팁을 주셔서 감사합니다.이 동일한 결과를 얻었지만 다른 방법을 사용했습니다. 문제는 'OR'조건이있는 영역에서 선택이 반드시 선택된다는 것입니다. 이 예제는'one request'를 만족하지 않습니다.'first query'는'Object2'를 리턴합니다. 어떻게 그러한 결과를 얻었습니까? – ladone

+0

'OR'조건에 대한 의미를 이해하지 못합니다. 이를 설명하기 위해 샘플 입력과 출력을 제공하십시오. 우리가 예상치 못한 데이터로부터 추론하기를 기대하기보다는 비즈니스 규칙을 설명 할 수 있다면 더 좋을 것입니다. 아마도 매트릭스로? 영어가 모국어가 아니지만 귀하의 요구 사항에 대해 명확한 답변을 드릴 수만 있습니다. – APC

+0

제 말은 왜'[item1, item2, item3, item4]'는'object1'을 리턴하지만'object4'를 리턴하지 않습니까? 그 규칙은 무엇입니까? – APC

0

내 문제를 해결 ... 네 분야와 일치하는 전문을 찾을 수있는 쿼리 다음과 같습니다

SELECT d.name as discipline_name, s.name as specialization_name 
FROM pqh1s_enrolle_disciplines d 
LEFT JOIN pqh1s_enrolle_discipline_specializations ds ON ds.discipline_id = d.id 
LEFT JOIN pqh1s_enrolle_specializations s ON s.id = ds.specialization_id 
WHERE d.id IN (1, 2) 
GROUP BY s.id 
HAVING COUNT(DISTINCT ds.priority) = 2