Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 29.03.2010, 00:32
Аватар для Jekel
Профессор
Отправить личное сообщение для Jekel Посмотреть профиль Найти все сообщения от Jekel
 
Регистрация: 20.11.2009
Сообщений: 257

PHP. Цикл for от 0 до 10 с подключением к БД тупит
Цикл for от 0 до 10 с подключением к БД выполняется 650ms это же не нормально( как это сделать по людски?

Есть БД в ней map таблица и там слолбци id, x, y, img... в ней 100 записей 10*10 клеточек кароч....
1 | 1 | 10 | title.gif
2 | 2 | 0 | title2.gif итд

Есть код:
<?php
session_start();
header('Content-Type: text/xml; charset=windows-1251');
require_once "config.php";
mysql_connect($host, $userdb, $passdb); 
mysql_select_db($database);

for ($y=0; $y<=10; $y++){
for ($x=0; $x<=10; $x++){
  
$mybase = mysql_fetch_assoc(mysql_query("SELECT * FROM map WHERE x='".$x."' AND y='".$y."'"));

if($mybase["img"]!=NULL && ($_SESSION["x".$x."y".$y]!=$mybase["img"])){
	$all.="<x".$x."y".$y.">".$mybase["img"]."</x".$x."y".$y.">";
	$_SESSION["x".$x."y".$y]=$mybase["img"];
}	
}
}

//Вывод на экран

echo '<?xml version="1.0" ?>';
echo '<map>';
echo $all;
echo '</map>';
?>
Ответить с цитированием
  #2 (permalink)  
Старый 29.03.2010, 00:39
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от Jekel
выполняется 650ms это же не нормально(
вполне нормально для 100 запросов к базе.
почему бы вам не использовать один запрос(на все нужные вам ячейки) с сортировкой, и потом его результаты уже получать в цикле
Ответить с цитированием
  #3 (permalink)  
Старый 29.03.2010, 00:44
Аватар для Jekel
Профессор
Отправить личное сообщение для Jekel Посмотреть профиль Найти все сообщения от Jekel
 
Регистрация: 20.11.2009
Сообщений: 257

Лучше на много вариант, PeaceCoder подсказал, лучше есть что-то? тк сказать производительнее...
да и сортировать мне надо не так...мне нужно в зависимости от usery и userx сортировать ну как в первом листинге
$q = mysql_query("SELECT * FROM map ORDER BY y ASC, x ASC");
while($mybase = mysql_fetch_assoc($q)){

if($mybase["img"]!=NULL && ($_SESSION["x".$mybase["x"]."y".$mybase["y"]]!=$mybase["img"])){
     $all.="<x".$mybase["x"]."y".$mybase["y"].">".$mybase["img"]."</x".$mybase["x"]."y".$mybase["y"].">";
     $_SESSION["x".$mybase["x"]."y".$mybase["y"]]=$mybase["img"];
}
}

Последний раз редактировалось Jekel, 29.03.2010 в 00:46.
Ответить с цитированием
  #4 (permalink)  
Старый 29.03.2010, 00:48
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

именно это я вам только что и сказал
основная оптимизация проведена
дальнейшие оптимизации лежат из области экономии на спичках
Ответить с цитированием
  #5 (permalink)  
Старый 29.03.2010, 01:27
Аватар для Jekel
Профессор
Отправить личное сообщение для Jekel Посмотреть профиль Найти все сообщения от Jekel
 
Регистрация: 20.11.2009
Сообщений: 257

Капец, оно както плужит тупо! сейчас $user['x'] и $user['y'] = 5! Работу скрипта можно увидить здесь -> http://doobiz.co.cc/test/
$q = mysql_query("SELECT * FROM map WHERE x>='".($user['x']-5)."' AND x<='".($user['x']+5)."' AND y>='".($user['y']-5)."' AND y<='".($user['y']+5)."' ORDER BY y ASC, x ASC");
while($mybase = mysql_fetch_assoc($q)){

if($mybase["img"]!=NULL && ($_SESSION["x".$mybase["x"]."y".$mybase["y"]]!=$mybase["img"])){
     $all.="<x".$mybase["x"]."y".$mybase["y"].">".$mybase["img"]."</x".$mybase["x"]."y".$mybase["y"].">";
     $_SESSION["x".$mybase["x"]."y".$mybase["y"]]=$mybase["img"];
}
}
Ответить с цитированием
  #6 (permalink)  
Старый 29.03.2010, 01:35
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

$q = mysql_query("SELECT * FROM map WHERE x>=".($user['x']-5)." AND x<=".($user['x']+5)." AND y>=".($user['y']-5)." AND y<=".($user['y']+5)." ORDER BY y ASC, x ASC");

может быть стоит так?
Ответить с цитированием
  #7 (permalink)  
Старый 29.03.2010, 01:38
Аватар для Jekel
Профессор
Отправить личное сообщение для Jekel Посмотреть профиль Найти все сообщения от Jekel
 
Регистрация: 20.11.2009
Сообщений: 257

е-мое) работает))) капец...скобочки...спасибо огромное!)
Ответить с цитированием
  #8 (permalink)  
Старый 29.03.2010, 01:41
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от Jekel
скобочки
какие нафиг скобочки?
я ни одной скобки не тронул
я удалил кавычки одинарные в SQL-запросе, которые делали из вашего числа строку
Ответить с цитированием
  #9 (permalink)  
Старый 29.03.2010, 01:43
Аватар для Jekel
Профессор
Отправить личное сообщение для Jekel Посмотреть профиль Найти все сообщения от Jekel
 
Регистрация: 20.11.2009
Сообщений: 257

ну да))) кавычки)
Ответить с цитированием
  #10 (permalink)  
Старый 29.03.2010, 01:44
Аватар для Jekel
Профессор
Отправить личное сообщение для Jekel Посмотреть профиль Найти все сообщения от Jekel
 
Регистрация: 20.11.2009
Сообщений: 257

еще вопросик, правда по js, хотя это везде присуще
try{ 
map = xmlResp.getElementsByTagName('x'+x+'y'+y).item(0).firstChild.data; 
document.getElementById('x'+x+'y'+y).style.backgroundImage  = "url(img/" + map + ")"; 
}catch{ 
document.getElementById('x'+x+'y'+y).style.backgroundImage  = "url(img/no.gif)"; 
}


не работает это( и так пробывал:

try{ 
map = xmlResp.getElementsByTagName('x'+x+'y'+y).item(0).firstChild.data; 
if(!map){document.getElementById('x'+x+'y'+y).style.backgroundImage  = "url(img/" + map + ")"; 
}else{ 
document.getElementById('x'+x+'y'+y).style.backgroundImage  = "url(img/no.gif)"; 
} 
}catch(e){}
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение проблемы кодировок для AJAX и PHP без iconv (cp1251 в AJAX) Serge Ageyev AJAX и COMET 10 24.04.2013 20:48