Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用简单公式查找与MYSQL中给定行最接近的行?_Php_Mysql_Math - Fatal编程技术网

Php 使用简单公式查找与MYSQL中给定行最接近的行?

Php 使用简单公式查找与MYSQL中给定行最接近的行?,php,mysql,math,Php,Mysql,Math,在一个数学公式中,我想计算差值或相似性,差值等于sqrts1-t1^2,所以种子行的值1和比较行的值1之间差值的平方根,平方。其中S1等于种子行的值1,T1等于比较行的值1 要计算种子行与比较行的总体相似性或差异: [sqrt(s1-t1)^2]+[sqrt(s2-t2)^2]+[sqrt(s3-t3)^2]+... = Similarity 例如,使用下表,ID1是种子行,Id2是比较行,然后ID3,然后id4等等将是下面的比较行 [sqrt(3-1)^2]+[sqrt(4-5)^2]+[s

在一个数学公式中,我想计算差值或相似性,差值等于sqrts1-t1^2,所以种子行的值1和比较行的值1之间差值的平方根,平方。其中S1等于种子行的值1,T1等于比较行的值1

要计算种子行与比较行的总体相似性或差异:

[sqrt(s1-t1)^2]+[sqrt(s2-t2)^2]+[sqrt(s3-t3)^2]+... = Similarity
例如,使用下表,ID1是种子行,Id2是比较行,然后ID3,然后id4等等将是下面的比较行

[sqrt(3-1)^2]+[sqrt(4-5)^2]+[sqrt(3-3)^2]+[sqrt(5-5)^2]+[sqrt(0-4)^2]+[sqrt(1-1)^2]
+[sqrt(3-2)^2]+[sqrt(4-4)^2] = 2 + 1 + 0 + 0 + 4 + 0 +1 + 4 = 12
从名单上往下看

ID1 to ID2: 2 + 1 + 0 + 0 + 4 + 0 + 1 + 4 = 12
ID1 to ID3: 1 + 1 + 1 + 4 + 4 + 0 + 2 + 1 = 14
ID1 to ID4: 0 + 0 + 0 + 3 + 1 + 1 + 0 + 1 = 6
ID1 to ID5: 1 + 0 + 0 + 4 + 0 + 4 + 3 + 3 = 15 
因此,根据该公式,已经确定行ID4与行ID1最匹配,因为它的数量最少

ID   |  Value1  | Value2  | Value3 | Value4 | Value5 | Value6 | Value7 | Value8 |
----------------------------------------------------------------------------------
1    |    3     |    4    |    3   |    5   |    0   |    1   |   3    |    4   |
2    |    1     |    5    |    3   |    5   |    4   |    1   |   2    |    4   |
3    |    4     |    3    |    2   |    1   |    4   |    1   |   1    |    5   | 
4    |    3     |    4    |    3   |    2   |    1   |    2   |   3    |    3   | 
5    |    2     |    4    |    3   |    1   |    0   |    5   |   0    |    1   |

我正在使用PHP和MySQL,我想知道如何实现上面解释的功能?

为了找到最接近特定行的行,您可以使用如下查询, 其中,每一行都连接到种子行,结果按计算出的差值排序:

SELECT t2.*, ABS(t1.v1-t2.v1)+ABS(t1.v2-t2.v2)+ABS(t1.v3-t2.v3) AS diff
FROM (SELECT * FROM tbl WHERE id=1) AS t1
JOIN tbl AS t2 ON t1.id <> t2.id
ORDER BY diff;
如果要查找每对行之间的差异,可以使用如下查询:

SELECT t1.id AS t1_id, t2.id AS t2_id,
       ABS(t1.v1-t2.v1)+ABS(t1.v2-t2.v2)+ABS(t1.v3-t2.v3) AS diff
FROM tbl AS t1
INNER JOIN tbl AS t2 ON t1.id <> t2.id
ORDER BY t1.id, diff;

平方差的平方根将得到一个近似等于差的值。你确定你用的是正确的公式还是我遗漏了什么。是的,我确定这是正确的公式。我之所以平方根是因为它总是会产生一个积极的结果。如果这个问题使事情复杂化,则不必用正在使用的公式来回答。我只是想找出最有效的方法,通过每一行循环进行比较。一旦我得到结果,我就可以找到平方根的平方。如果你想要的只是差值的正值,你可以使用abs。请分享你已经实现的代码,这样abs就可以工作了,但是现在,我如何循环遍历mysql表,并获得比较种子行和比较行的每列的总和,就像我在原始帖子中所说的那样?就这样!!非常感谢。