Imaginez un espace hexagonal avec 3 dimensions.Sélection de cellules voisines dans un champ hexagonal
Chaque carreau a les coordonnées XYZ. Je dois sélectionner un voisin de cellule donné dans le même plan. Avec SQL il est ressemble à:
$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);
Mais, je ne l'aime pas de cette façon. Peut-être que quelqu'un connaît des algorithmes plus optimaux? Merci!
Je n'ai presque pas remarqué l'affaire $ tbDir avant de commenter. Cela me semble bon. Il permet également de placer des index sur x, y et z pour une optimisation supplémentaire. –
Voici le résultat avec 9 tuiles, mais besoin de 6 + cible. extra 2 – Coyod
Je pense que le dernier exemple est le plus optimal. Je vous remercie! – Coyod