我在数据库中有一个连接表,它将不同的实体链接在一起,它们可以按任意顺序存储。所以,你可以:
|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)都会生成相同的哈希值。这可以使用任意数量的值并找到该组合的哈希值。
无论数据库设计是否有效,我只是对为这种用例生成哈希的方法感到好奇。
答案 0 :(得分: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