PHP: public function showMap($mysqli, $userData, $resorcesCityes) { $this->getStartEnd(); // Узнаем координаты(x, y) верхнего левого и правого нижнего улов $this->zoom($userData); // Узнаем размеры картинок $this->mapControls($userData); // Выводим кнопки навигации echo '<table cellspacing="0" cellpadding="0"> <tbody> <tr> <td class="m"></td>'; for($num = $this->startX; $num <= $this->endX; $num++) { echo ' <td class="m"> ', $num, ' </td>'; // Выводит координаты X в ряд } echo '</tr>'; $check = $mysqli->query("SHOW TABLES LIKE '{$userData->row['login']}'"); // Проверяем есть ли таблица засвеченнных участков карты в этого пользователя if($check->num_rows == 0) { require_once('includes/table.php'); // Если нету - создаем } for($num = $this->startY; $num <= $this->endY; $num++) { echo '<tr> <td class="m">'; echo $num; // Выводит Y echo '</td>'; $result = $mysqli->query("SELECT * FROM `map` WHERE (`x` BETWEEN '{$this->startX}' AND '{$this->endX}') AND `y` = '{$num}'"); // Достаем из БД ряд клеток карты while($map = $result->fetch_array(MYSQLI_ASSOC)) { if(!isset($_SESSION['map_num'])) { $_SESSION['map_num'] = 1; $one = $map['id']; // Id левого верхнего угла $two = $one + (600 * ($this->cells - 1)) + ($this->cells - 1); // Правого нижнего $result = $mysqli->query("SELECT * FROM `{$userData->row['login']}` WHERE `loc_id` BETWEEN '{$one}' AND '{$two}'"); // Достаем из таблицы засвеченных участков карты id клеток от левого вернего угла до правого нижнего while($check = $result->fetch_array(MYSQLI_ASSOC)) { $loc_id[] = $check['loc_id']; // Сохраняем в массив все засвеченные клетки } } if($map['city'] == 0) { // Если на клетке нет города $city = $_GET['selected_city']; }else { // Если есть if(in_array($map['city'], $resorcesCityes->id)) { // Если это город игрока $city = $map['city']; }else { $city = $_GET['selected_city']; } } echo ' <td> <a class="lnk" href="?q=location&id_location=', $map['id'], '&selected_city=', $city, '"> <img class="map-locs" src="'; if(!in_array($map['id'], $loc_id)) { echo $map['image']; }else{ echo $map['imag_l']; } echo '" ', $this->widthHeight,' title="[', $map['x'], ';', $map['y'],'] ', $map['name'],'">'; echo ' </a> </td>'; } echo '</tr> '; } unset($_SESSION['map_num']); echo ' </tbody> </table>'; $this->naw($mysqli); // Подключаем навигацию и миникарту echo '</div>'; } ну и проблема: в первом ряду выводится первая картинка, а остальные, не выводятся совсем скрин: https://drive.google.com/open?id=1iJcSZQRWW9XKEi2djTzBTfxUzXMGXOj7
Вопрос снят PHP: if(!isset($_SESSION['map_num'])) { if($check->num_rows == 0) { require_once('includes/table.php'); // Если нету - создаем } $result = $mysqli->query("SELECT * FROM `map` WHERE (`x` BETWEEN '{$this->startX}' AND '{$this->endX}') AND `y` = '{$num}'"); // Достаем из БД ряд клеток карты $map = $result->fetch_array(MYSQLI_ASSOC); $_SESSION['map_num'] = 1; $one = $map['id']; // Id левого верхнего угла $two = $one + (600 * ($this->cells - 1)) + ($this->cells - 1); // Правого нижнего $result = $mysqli->query("SELECT * FROM `{$userData->row['login']}` WHERE `loc_id` BETWEEN '{$one}' AND '{$two}'"); // Достаем из таблицы засвеченных участков карты id клеток от левого вернего угла до правого нижнего while($check = $result->fetch_array(MYSQLI_ASSOC)) { $loc_id[] = $check['loc_id']; // Сохраняем в массив все засвеченные клетки } } Вынес условие из цикла while, добавил еще один запрос и все почему то заработало...
А если это будет в одной таблице, то там может быть до 180 миллионов строк, разве не лучше разделить по таблицам? Незнаю как сделать по другому..
похоже отсюда и растут ноги )))) ну обычно под каждого пользователя не делают отдельные таблицы... все в одной таблице - это облегчает дальнейшую работу.... вот у вас даже 100 пользователей - - какой SQL будет - чтоб найти например нужного пользователя? сверить логин пароль? а если в оной таблице - все легко и просто Код (Text): SELECT * FROM T WHERE login='login' && password ='password'
У меня есть таблица users, а это другая в которую записываются все открытые участки карты этим пользователем, в этой таблице только одно поле-id --- Добавлено --- Карта 600х300, а это 180 тысяч клеток, а это много и по отдельным таблицам и в одной, хотя в таблицу записываются только окрытые клетки, открыть всю карту будет не так уж и сложно
Не так написал тысяча таблиц, по 180000 записей.. но это уже не важно Придумал как сделать отображение засвеченых клеток без этих таблиц)
PHP: if(!isset($_SESSION['map_num'])) { $_SESSION['map_num'] = 1; $result = $mysqli->query("SELECT `id` FROM `map` WHERE `x` = '{$this->startX}' AND `y` = '{$num}'"); // Достаем из БД левую верхнюю клетку карты $map = $result->fetch_array(MYSQLI_ASSOC); $one = $map['id'] - 1202; // Id левого верхнего угла $two = $one + (600 * ($this->cells + 3)) + ($this->cells + 2); // Правого нижнего $result2 = $mysqli->query("SELECT `id`, `city` FROM `map` WHERE `x` BETWEEN '{$this->startX}' - '2' AND '{$this->endX}' + '2' AND `id` BETWEEN '{$one}' AND '{$two}' AND `type` = '5'"); // Достаем из БД центры городов готорые будут полностью или частично видны на карте while ($map = $result2->fetch_array(MYSQLI_ASSOC)) { if (in_array($map['city'], $resorcesCityes->id)) { for ($i = $map['id'] - 1202; $i <= $map['id'] + 1198; $i += 600) { for($f = $i; $f <= $i + 4; $f++) { $loc_id[] = $f; } } } } } Вот и результат: https://drive.google.com/open?id=1bweKM1ZoyYP1FUzzNmdoy8X0eDgKNKQS Всем спасибо --- Добавлено --- кстати раньше для показа карты 15х15 делалось 450 запросов к БД ну а сейчас получается 17, но можно попробовать сделать только 3 или 17 тоже пойдет?