Я думаю, что это не есть хорошо выполнять два почти одинаковых запроса, но почему-то сократить до одного у меня не получилось.
public function findRegion(array $pos) {
list($x, $y, $z) = $pos;
$result = $this->database->query('
SELECT COUNT(*) FROM `regions` WHERE
' . $x . ' >= LEAST(`Ax`, `Bx`) AND ' . $x . ' <= GREATEST(`Ax`, `Bx`) AND
' . $y . ' >= LEAST(`Ay`, `By`) AND ' . $y . ' <= GREATEST(`Ay`, `By`) AND
' . $z . ' >= LEAST(`Az`, `Bz`) AND ' . $z . ' <= GREATEST(`Az`, `Bz`)
');
if ($result->num_rows > 0) {
return $this->database->query('
SELECT * FROM `regions` WHERE
' . $x . ' >= LEAST(`Ax`, `Bx`) AND ' . $x . ' <= GREATEST(`Ax`, `Bx`) AND
' . $y . ' >= LEAST(`Ay`, `By`) AND ' . $y . ' <= GREATEST(`Ay`, `By`) AND
' . $z . ' >= LEAST(`Az`, `Bz`) AND ' . $z . ' <= GREATEST(`Az`, `Bz`)
')->fetch_assoc();
} else {
return false;
}
}
В общем, я сделал так:
public function findRegion(array $pos) {
list($x, $y, $z) = $pos;
$result = $this->database->query('
SELECT * FROM `regions` WHERE
' . $x . ' >= LEAST(`Ax`, `Bx`) AND ' . $x . ' <= GREATEST(`Ax`, `Bx`) AND
' . $y . ' >= LEAST(`Ay`, `By`) AND ' . $y . ' <= GREATEST(`Ay`, `By`) AND
' . $z . ' >= LEAST(`Az`, `Bz`) AND ' . $z . ' <= GREATEST(`Az`, `Bz`)
');
if ($result->num_rows > 0) {
return $result->fetch_assoc();
} else {
return false;
}
}
Но так я получаю ошибку, если нет совпадений