php - SQL select查询与数据计算

标签 php mysql sql algorithm

我需要在数据库中找到三个给定数字的最接近点并返回它们的“测试”单元格。

这些是我想要做的计算,其中 r1、g1 和 b1 是表中的不同列,r2​​、g2 和 b2 是给定的数字。

d=sqrt((r2-r1)^2+(g2-g1)^2+(b2-b1)^2)
p=min(d/sqrt((255)^2+(255)^2+(255)^2))

到目前为止我得到的是

$rr = 130;
$gg = 83;
$bb = 234;

SELECT test
  FROM `my table` 
 WHERE MIN(SQRT(POWER($rr-r,2)+POWER($gg-g,2)+POWER($bb-b,2)) / 
          (SQRT(POWER(255,2)+POWER(255,2)+POWER(255,2)))

我正在寻找解决这个问题的方法,也许我可以使用 php 在 mysql 之外进行计算?

我的表中的数据是 0 到 255 之间的随机数,我可以使用什么算法进行最佳搜索?

示例表

╔════╦══════════════╦══════╦════╦═════╦
║ id ║  test        ║  r   ║  g ║ b   ║
╠════╬══════════════╬══════╬════╬═════╣
║  1 ║ sample1      ║  4   ║ 72 ║ 251 ║
║  2 ║ sample2      ║  148 ║ 9  ║ 139 ║
║  3 ║ sample3      ║  101 ║ 233║ 88  ║
║  4 ║ sample4      ║  231 ║ 147║  16 ║
╚════╩══════════════╩══════╩════╩═════╝

给定数字 rr=151 gg= 18 和 bb=140 我希望它返回“sample2”

最佳答案

这个想法是,您可以按距离对行进行排序,然后仅返回第一个(距离较小)。

还要考虑到,对于顺序,如果省略根号和分数,结果不会改变。这将加快搜索速度并编写显式产品,而不是使用 POWER 函数。

SELECT test
  FROM `my table` 
  ORDER BY ($rr-r)*($rr-r) + ($gg-g)*($gg-g) + ($bb-b)*($bb-b)
  LIMIT 1;

关于php - SQL select查询与数据计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43537247/

相关文章:

php - 使用 Codeigniter 表库时将数据传递到 Twitter Bootstrap Modal

javascript - 如何使用ajax创建目录并在其中上传文件?

php - 更新多行而不循环: PHP-MySQL

Mysql获取多列计数

PHP SQL 每 9 个月输入一次 null

php - 从 MySQL 中的子查询中抓取查询

php - 通过PHP将一张表从MySQL复制到SQLite

php - 从 mysql 查询中提取第一个图像标签

mysql - 我可以进行sql转换吗

mysql - Eloquent hasOne和一张大表,在查询中不做限制