# Swank (02.06.2015 / 09:53)
Делаю игру, хочу сделать игровое поле, для начала 1000х1000 клеток.
Сойдет ли mysql? Ведь это 1000000 записей.
Зависит ли время выполнения элементарных select'ов и updete от кол. записей?
Может mon
Время от количества зависит.
Миллион записей, не так много. При нормально проиндексированных таблицах снижения скорости не заметишь.
Как такой скрипт может создавать более 1000001 записей?
<?php
set_time_limit(0);
require 'init.php';
$x = $y = 1;
for($i=1;$i<1000001;$i++) {
DB::prepare('INSERT INTO `world` (`x`, `y`)
VALUES (:x, :y);', ['x' => $x, 'y' => $y]);
if($x < 1000)
$x++;
else {
$x= 1;
$y++;
}
}
?>
Дело в браузере наверно
Запустил скрипт с помощу wget и все стало норм.
Сам задал сам ответил
Swank, prepare должен быть вне цикла
а execute в цикле, так ты каждый раз подготавливаешь запрос, а достаточно один раз и вставлять записи
Koenig, В курсах, но чет забыл, но ладно уже наспаунил милион клеточек
Теперь другой вопрос:
Как мне выбрать клеточки в радиусе 8 клеток от клетки с x = 486, y = 256?
А точней не с радиусом, а квадрат в 4 клетки вокруг x, y, может кто запрос написать
поторопился я спрашивать, сделал сам
Swank, пример кода, я просто когда пятнашки писал, тоже надо было вокруг пустой клетки координаты вычислять
https://ru.wikipedia.org/wiki/Пятнашки
Koenig, Зделал так:
<?php
require 'init.php';
$x = USER::$data['x']; // Позиция кёниг'а
$y = USER::$data['y']; // Тоже позиця
$r = 4; // насколько далеко кёниг может смотреть )
$rows = DB::prepare('SELECT * FROM `world` WHERE `x` > :x1 AND `x` < :x2 AND `y` > :y1 AND `y` < :y2',[
'x1' => $x - $r - 1,
'y1' => $y - $r - 1,
'x2' => $x + $r,
'y2' => $y + $r
])->fetchAll(); // Узнаем что находиться вокруг кёнига
//print_r($rows);
$out = [
'result' => '1',
'world' => $rows
];
unset($rows);
echo json_encode($out);
//echo 'Генирация: ' . round(microtime(true) - $_SERVER["REQUEST_TIME_FLOAT"], 3) . 'сек. Память: ' . round(memory_get_usage() / 1024, 2) . 'Кб. Запросов: ' . DB::getQueryCount() . ' Время выполнения запросов: ' . round(DB::getQueryTime(), 3). 'сек.';
?>