2014-10-11 1 views
1

특정 레코드가 이미 데이터베이스에 있는지 확인할 수있는 일종의 함수 또는 쿼리를 작성하려고합니다. 다음 규칙이 적용특정 양의 유사한 데이터로 행을 선택하는 방법

  • 표가 6 열
  • 내 아직 - 투 - 빌드 쿼리이 쿼리는 각 행을 찾아야한다
  • 완전한 행 개체에 대한 액세스 (6 개 값)가 적어도 4 개체에서 6 개 해당하는 값 중 나는

가이 같은 쿼리를 작성하는 경우에도 가능 MySQL의를 사용

  • 을 통과? 내 목표는 같은 행이 이미 데이터베이스에 이미있는 경우 true를 반환 할 수있는 함수를 갖는 것입니다.

    여러 개의 where 문으로 쿼리를 만드는 유일한 방법은 어디입니까? (각 조합에 대해 을 시도합니다. 4 가지 값)?

    의사 :

    function getSimilarRow(Row_Object $row) 
    { 
        //select * 
        //from table_x 
        //where 4 out of 6 properties from object $row apply 
    } 
    
  • +0

    코드/의사 코드를 게시하십시오. –

    +0

    거기에 내가 줄 수있는만큼 – Flame

    +0

    어떤 DBMS를 사용하고 있습니까? 포스트그레스? 신탁? –

    답변

    1

    당신이 일치하려는 각 속성에 대한 where 절에 case statement를 사용할 수 있습니다. 조건을 충족하는 경우 case 문에 1; 그렇지 않다면 0. 그 경우의 합은 >= 4이어야합니다. 분명히

    select * from SomeTable where 
    (case when propertyOne = 'value1' then 1 else 0 end) + 
    (case when propertyTwo = 'value2' then 1 else 0 end) + 
    (case when propertyThree = 'value3' then 1 else 0 end) + 
    (case when propertyFour = 'value4' then 1 else 0 end) + 
    (case when propertyFive = 'value5' then 1 else 0 end) + 
    (case when propertySix = 'value6' then 1 else 0 end) >= 4 
    

    당신은 당신이 경우 각 절에 로직을 변경할 수 있습니다 :

    내가 MySQL을하지만 다음에 대해 잘 알고이 작동하지 것을 해요 (나는 그것이 작동 보여 빠른 SQL Fiddle을 노크) 그들이 like 또는 무엇이든하는 것을 선호합니다. 정말로 창조적으로 접근해야한다면 1 이외의 것을 사용하여 각 열에 가중치를 적용 할 수도 있습니다.

    +0

    aight 감사합니다. 이 CASE 문을 사용하여 알아낼 것입니다. – Flame