大家好, 最近在用mySQL, 现在能用它的C API 把数据放到数据库里面了. 有个问题是, 比如数据库的table有L1, L2, L3 这么几栏. 假设给定3个数, 比如x, y, z, 我想从数据库里面找出满足使得 (x-L1)^2+ (y-L2)^2+ (z-L3)^2最小的那组L1, L2, L3. 应该怎么实现呢? 谢谢大家了

解决方案 »

  1.   

    select *
    from table1
    order by (x-L1)^2+ (y-L2)^2+ (z-L3)^2 
    limit 1
      

  2.   

    select *
    from table1
    order by (x-L1)*(x-L1)+ (y-L2)*(y-L2)+ (z-L3)*(z-L3)
    limit 1
      

  3.   

    这个问题貌似和我的http://topic.csdn.net/u/20110504/12/eddecac3-9e3a-4ac0-8739-2e8f4d4923ee.html类似
    就是查找一个多维度里最邻近的点,你这个是三维空间
    数据量大的话,LS这些方式效率肯定不行啊。
      

  4.   

    楼上说的也确实是我关心的问题啊, 如果数据有几百万,这样search速度快吗? 
      

  5.   

    我刚才试了99990个数据,每个数据是10维的,发现查找的速度似乎还是不错啊(0.58sec)只是现在insert太慢了,我是一条语句,一条语句insert的。还需要继续学习
      

  6.   

    不快,因为MYSQL必须对所有的这几百万记录都做一遍 (x-L1)^2+ (y-L2)^2+ (z-L3)^2  ,并进行排序之后才能得到结果。
      

  7.   

    这么说,你写的语句里面那个 limit 1 就是说输出排序后的最小的那组?还有一个问题是,如果我需要在一定范围内找最佳值呢?比如数据库的table除了有L1, L2, L3 这么几栏. 还有x1, x2, y1, y2,现在从数据库里面找出满足使得 (x-L1)^2+ (y-L2)^2+ (z-L3)^2最小的那组L1, L2, L3. 并且x1, x2, y1, y2要在一定范围内, 比如 1<x1<2, 0.5 < x2, 0.1< y1 < 3, y2<1.5
    那怎么弄呢? 谢谢了