想象具有三维的六角形空间。在六角形区域中选择邻居单元格
每个图块都有坐标XYZ。 我需要在同一平面中选择给定的单元格邻居。 有了SQL它看起来像:
$tbDir = $y % 2 == 0 ? -1 : 1;
$result = db_query('SELECT x,y,z FROM {cells} WHERE
x = %d AND y = %d AND z = %d OR
x = %d AND y = %d AND z = %d OR
x = %d AND y = %d AND z = %d OR
x = %d AND y = %d AND z = %d OR
x = %d AND y = %d AND z = %d OR
x = %d AND y = %d AND z = %d OR
x = %d AND y = %d AND z = %d ',
$x, $y, $z,
$x-1, $y, $z,
$x+1, $y, $z,
$x, $y-1, $z,
$x, $y+1, $z,
$x+$tbDir, $y-1, $z,
$x+$tbDir, $y+1, $z);
但是,我不喜欢这种方式。 也许有人知道更优化的算法? 谢谢!
在我评论之前,我几乎没有注意到$ tbDir的情况。这对我来说很好。它还允许将索引放置在x,y和z上以进一步优化。 – 2009-12-07 13:49:44
这里是结果9瓦,但需要6 +目标。额外2 – Coyod 2009-12-07 13:59:22
我认为最后一个例子是最优的。谢谢! – Coyod 2009-12-07 14:22:06