2015-01-09 2 views
1

서로 다른 엔티티를 함께 연결하는 데이터베이스에 조인 테이블이 있으며 어느 순서로든 저장할 수 있습니다. 그래서, 당신은 할 수 :이 같은 연결로 간주 될 수고유 한 조합에 대한 해시 생성

|column1|column2| 
+-------+-------+ 
12345 |67890 

또는

|column1|column2| 
+-------+-------+ 
67890 |12345 

는, 순서는 무관하다.

ID가 전달 된 순서에 관계없이 동일한 해시를 만드는 가장 좋은 방법은 궁금합니다.

function relationship_hash() 
{ 
    $params = func_get_args(); 
    sort($params); 
    return md5(implode(',', $params)); 
} 

그래서 relationship_hash (12345,67890)와 relationship_hash (67890,12345) 같은 해시를 생성하는 것 모두 :

내가 생각할 수있는 최선입니다. 이것은 임의의 수의 값을 취하여 해당 조합에 대한 해시를 찾을 수 있습니다.

데이터베이스 디자인의 효율성 여부에 관계없이 필자는 이러한 종류의 유스 케이스에 대해 해시를 생성하는 방법에 대해 궁금합니다.

+2

나는 그 (것)들을 분류하는 것은 당신의 자신의 질문에 응답했다고 생각한다. PHP에서 순서대로 값을 사용하여 해쉬가 생성되는 한 황금으로 처리됩니다. –

답변

2

정렬되지 않은 pairing function을 사용하여 다른 두 번호에서 고유 번호를 생성 할 수 있습니다. 인수의 순서는 중요하지 않습니다.

function relationship_hash($n1, $n2) { 
    $ret = $n1*$n2+((abs($n1-$n2)-1)^2)/4; 
    return md5($ret); // maybe you don't want to use md5 for this 
} 

echo relationship_hash(12345, 67890), "\n"; // 75071b9bb02d1d75350bd6b926f323f8 
echo relationship_hash(67890, 12345), "\n"; // 75071b9bb02d1d75350bd6b926f323f8