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>'; ?> |
Цитата:
почему бы вам не использовать один запрос(на все нужные вам ячейки) с сортировкой, и потом его результаты уже получать в цикле |
Лучше на много вариант, 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"]; } } |
именно это я вам только что и сказал
основная оптимизация проведена дальнейшие оптимизации лежат из области экономии на спичках |
Капец, оно както плужит тупо! сейчас $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"]; } } |
$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"); может быть стоит так? |
:blink: е-мое) работает))) капец...скобочки...спасибо огромное!)
|
Цитата:
я ни одной скобки не тронул я удалил кавычки одинарные в SQL-запросе, которые делали из вашего числа строку |
ну да))) кавычки)
|
еще вопросик, правда по 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){} |
Часовой пояс GMT +3, время: 21:30. |