用MySQL和PHP搜索瓷砖网格

时间:2013-11-14 00:50:52

标签: php mysql

我在MySQL中有一系列行,带有'location'列,表示二维xy网格上对象的位置。我想在表格中搜索位置在某个特定区块的给定距离内的行。

例如,如果我在[34,56]的10个图块中运行搜索,则会返回“位置”值介于[24-44和46-66]之间的所有行。

我解决这个问题的方法是创建一个数组(使用for循环),其中包含所有可能包含在该搜索词中的tile,然后查询MySQL:

"SELECT * FROM table WHERE localcoordinate IN ('$rangearray')"

此解决方案工作正常,但资源非常密集。我希望能够在数百或数千个瓷砖的距离上进行多次搜索。任何人都可以建议一种更快的方法吗?

1 个答案:

答案 0 :(得分:0)

通过实施以下策略更改,我将资源消耗提高了100倍。

1)我将xy坐标分成了表格中的两个字段。

2)我使用“BETWEEN”功能在MySQL中本地搜索。

最终查询看起来像这样。您可以从查询中推断出数据结构。

SELECT * FROM table WHERE localcoordinateX BETWEEN $x-lo AND $x-hi AND localcoordinateY BETWEEN $y-lo AND $y-hi.

我第一次想到这个,但我没有。只是发布到堆栈交换的行为让我再次思考清楚了!