Форумы портала PHP.SU » » Работа с СУБД » Уменьшение запросов MySql

Страниц (1): [1]
 

1. Jeez - 18 Июля, 2011 - 22:31:25 - перейти к сообщению
Доброе время суток помогите пожалуйста уменьшить кол-во запросов
Цитата:
<!-- Время выполнения скрипта 0.42975 секунд -->
<!-- Время, затраченное на выполнение MySQL запросов: 0.21389 секунд -->
<!-- Общее количество MySQL запросов 12 -->
<!-- Использовано оперативной памяти: 0.31 MB -->
<!-- Для вывода использовалось сжатие gzip, уровень сжатия: 3 -->
<!-- Общий размер файла: 13964 байт; После сжатия: 5003 байт -->

Одна новость 1 запрос к БД(
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. if(!defined('SCRIPT'))
  3. {
  4.   die("Hacking attempt!");
  5. }
  6. if(isset($_GET['article_name']))  $_GET['article_name'] = str_replace(".html", '', $_GET['article_name']);
  7. //навигация
  8.  
  9. //главная
  10. $max = 10;
  11. @$page = $_GET['page'];
  12. $result = $db->query("SELECT COUNT(*) FROM ".PREFIX."_sarticles WHERE moderated='1'");
  13. $temp = $db->get_array($result);
  14. $posts = $temp[0];
  15. $total = (($posts - 1) / $max) + 1;
  16. $total =  intval($total);
  17. $page = intval($page);
  18. if(empty($page) or $page < 0) $page = 1;
  19. if($page > $total) $page = $total;
  20. $start = $page * $max - $max;
  21. if($start<0) $start = 0;
  22.  
  23.  
  24. //категории
  25. $maxc = 10;
  26. @$pagec = $_GET['page'];
  27. $resultс = $db->query("SELECT COUNT(*) FROM ".PREFIX."_sarticles WHERE moderated='1' AND cat_name='".$db->safesql($_GET['cat_name'])."'");
  28. $tempc = $db->get_array($resultс);
  29. $postsc = $tempc[0];
  30. $totalc = (($postsc - 1) / $max) + 1;
  31. $totalc =  intval($totalc);
  32. $pagec = intval($pagec);
  33. if(empty($pagec) or $pagec < 0) $pagec = 1;
  34. if($pagec > $totalc) $pagec = $totalc;
  35. $startc = $pagec * $maxc - $maxc;
  36. if($startc<0) $startc = 0;
  37.  
  38. //статья целиком
  39. $getquery = $db->query("SELECT * FROM ".PREFIX."_articles WHERE moderated='1' AND alt_name='".$db->safesql($_GET['article_name'])."' AND cat_name='".$db->safesql($_GET['cat_name'])."'");
  40. //вывод коротких новостей в категории с постраничной навигацией
  41. $scatquery = $db->query("SELECT * FROM ".PREFIX."_sarticles WHERE moderated='1' AND cat_name='".$db->safesql($_GET['cat_name'])."' ORDER BY `id` DESC LIMIT $startc,$maxc");
  42. //вывод коротких новостей с постраничной навигацией
  43. $squery = $db->query("SELECT * FROM ".PREFIX."_sarticles WHERE moderated='1' ORDER BY `id` DESC LIMIT $start,$max");
  44.  
  45. //full новость
  46. if(!empty($_GET['article_name']) && !empty($_GET['cat_name']))
  47. {
  48. if($db->num_rows($getquery)){
  49. while($data = $db->get_array($getquery)){
  50. $title = $data['title'];
  51. $xcat = $db->get_array($db->query("SELECT * FROM ".PREFIX."_category WHERE alt_name='".$data['cat_name']."'"));
  52. $titlenews .= ''.$data['title'].' &raquo; ';
  53. $titles .= ' &raquo; <a href="/'.$xcat['alt_name'].'">'.$xcat['name'].'</a> &raquo; '.$data['title'].'';
  54. $content .= '
  55. <div class="base btype2">
  56. <div class="heading">
  57. <h3><b><span>'.$data['title'].'</span></b></h3>
  58. </div>
  59. <div class="bci_block"><div class="bci_border"><div class="bci_cont">
  60. <table width="100%" border="0">
  61. <tr height="30px">';
  62. $content .= '<td width="15%" align="left"><strong>Категория:</strong>&nbsp;<a href="/'.$xcat['alt_name'].'">'.$xcat['name'].'</a><div style="float:right;"><strong>Дата:</strong>&nbsp;'.date_smart($data['dates']).'</div></td>';
  63. $content .= '
  64. </tr>
  65. </table>
  66. <table width="100%" border="0">
  67. <tr>
  68. <td background="/template/images/mline.gif" height="1" colspan="2"></td>
  69. </tr>
  70. </table>'.$data['article'].'<br>';
  71. //Теги
  72. if (!empty($data['tags'])) { // Если строка тэгов в базе не пустая, то:
  73.                  $tags = explode(", ", $data['tags']); // Разбиваем строку тэгов на слова
  74.                  $tagscount = count($tags); // Считаем их количество
  75.                  for ($i = 0; $i < $tagscount; $i++) { // Перебираем каждый элемент и присваиваем ему ссылку
  76.                  $tags[$i] = "<a href=\"/tags/".urlencode($tags[$i])."\">".$tags[$i]."</a>";
  77.                  }
  78.                  $tagline = implode(", ", $tags); // Собираем обратно, но уже со ссылками
  79. }
  80. $content .= '
  81. <b>Теги</b>: '.$tagline.'</a>
  82. <div style="clear:both;"></div>
  83. <!-- Сохронить -->
  84. <div style="float:right;">
  85. <script type="text/javascript" src="http://vkontakte.ru/js/api/share.js?10" charset="windows-1251"></script>
  86. <script type="text/javascript"><!--
  87. document.write(VK.Share.button(false,{type: "round", text: "Сохранить"}));
  88. --></script></div>
  89. <!-- Like -->
  90. <div style="float:left;">
  91. <div id="vk_like"></div>
  92. <script type="text/javascript">
  93. VK.Widgets.Like("vk_like", {type: "mini"});
  94. </script></div>
  95. ';
  96. $content .= '<br></div></div></div>';
  97. $content .= '</div>';
  98. $content .= '
  99. <!-- Коментарии -->
  100. <div id="vk_comments"></div>
  101. <script type="text/javascript">
  102. VK.Widgets.Comments("vk_comments", {limit: 20, width: "960", attach: "*"});
  103. </script>';
  104. }
  105. } else {
  106. $titlenews = 'Ошибка! &raquo; ';
  107. $titles = ' &raquo; Ошибка!';
  108. $content = <<<HTML
  109. <div class="base btype2">
  110. <div class="heading">
  111. <h3><b><span>Ошибка</span></b></h3>
  112. </div>
  113. <div class="bci_block"><div class="bci_border"><div class="bci_cont">Искомой статьи нет</div></div></div>
  114. </div>            
  115. <a href="javascript:history.go(-1)" mce_href="javascript:history.go(-1)">Вернуться</a>
  116. HTML;
  117. }
  118. if( $revert_cache ) $config['allow_cache'] = "no";
  119. }
  120. //short новость в категории
  121. elseif(empty($_GET['article_name']) && !empty($_GET['cat_name']))
  122. {
  123. if($db->num_rows($scatquery)){
  124. while($data = $db->get_array($scatquery)){
  125. $ycat = $db->get_array($db->query("SELECT * FROM ".PREFIX."_category WHERE alt_name='".$data['cat_name']."'"));
  126. $titlenews = ''.stripcslashes(trim($ycat['name'])).' &raquo; ';
  127. $titles = ' &raquo; '.stripcslashes(trim($ycat['name'])).'';
  128. $content .= '
  129. <div class="base btype2">
  130. <div class="heading">
  131. <h3><b><span><a href="/'.$data['cat_name'].'/'.$data['alt_name'].'.html">'.$data['title'].'</a></span></b></h3>
  132. </div>
  133. <div class="bci_block"><div class="bci_border"><div class="bci_cont">
  134. <table width="100%" border="0">
  135. <tr height="30px">';
  136. $content .= '<td width="15%" align="left"><strong>Категория:</strong>       <a href="/'.$ycat['alt_name'].'">'.$ycat['name'].'</a><div style="float:right;"><strong>Дата:</strong>&nbsp;'.date_smart($data['dates']).'</div></td>';
  137. $content .= '
  138. </tr>
  139. </table>
  140. <table width="100%" border="0">
  141. <tr>
  142. <td background="/template/images/mline.gif" height="1" colspan="2"></td>
  143. </tr>
  144. </table>'.$data['article'].'</div></div></div>';
  145. $content .= '</div>';
  146.  
  147. }
  148. // Проверяем нужны ли стрелки назад
  149. if ($pagec != 1) $pervpagec = '<a href=/'.$ycat['alt_name'].'/page/1>Первая</a>  <a href=/'.$ycat['alt_name'].'/page/'. ($pagec - 1) .'>Предыдущая</a>  ';
  150. // Проверяем нужны ли стрелки вперед
  151. if ($pagec != $totalc) $nextpagec = '  <a href=/'.$ycat['alt_name'].'/page/'. ($pagec + 1) .'>Следующая</a>  <a href=/'.$ycat['id'].'-'.$ycat['alt_name'].'/page/' .$totalc. '>Последняя</a>';
  152.  
  153. // Находим две ближайшие станицы с обоих краев, если они есть
  154. if($pagec - 5 > 0) $page5leftc = ' <a href=/'.$ycat['alt_name'].'/page/'. ($pagec - 5) .'>'. ($pagec - 5) .'</a>  ';
  155. if($pagec - 4 > 0) $page4leftc = ' <a href=/'.$ycat['alt_name'].'/page/'. ($pagec - 4) .'>'. ($pagec - 4) .'</a>  ';
  156. if($pagec - 3 > 0) $page3leftc = ' <a href=/'.$ycat['alt_name'].'/page/'. ($pagec - 3) .'>'. ($pagec - 3) .'</a>  ';
  157. if($pagec - 2 > 0) $page2leftc = ' <a href=/'.$ycat['alt_name'].'/page/'. ($pagec - 2) .'>'. ($pagec - 2) .'</a>  ';
  158. if($pagec - 1 > 0) $page1leftc = ' <a href=/'.$ycat['alt_name'].'/page/'. ($pagec - 1) .'>'. ($pagec - 1) .'</a>  ';
  159.  
  160. if($pagec + 5 <= $totalc) $page5rightc = '  <a href=/'.$ycat['alt_name'].'/page/'. ($pagec + 5) .'>'. ($pagec + 5) .'</a>';
  161. if($pagec + 4 <= $totalc) $page4rightc = '  <a href=/'.$ycat['alt_name'].'/page/'. ($pagec + 4) .'>'. ($pagec + 4) .'</a>';
  162. if($pagec + 3 <= $totalc) $page3rightc = '  <a href=/'.$ycat['alt_name'].'/page/'. ($pagec + 3) .'>'. ($pagec + 3) .'</a>';
  163. if($pagec + 2 <= $totalc) $page2rightc = '  <a href=/'.$ycat['alt_name'].'/page/'. ($pagec + 2) .'>'. ($pagec + 2) .'</a>';
  164. if($pagec + 1 <= $totalc) $page1rightc = '  <a href=/'.$ycat['alt_name'].'/page/'. ($pagec + 1) .'>'. ($pagec + 1) .'</a>';
  165.  
  166. // Вывод меню если страниц больше одной
  167.  
  168. if ($totalc > 1)
  169. {
  170. Error_Reporting(E_ALL & ~E_NOTICE);
  171. $content.= "<div class=\"navigation\" align=\"center\" style=\"margin-bottom:10px; margin-top:10px;\">";
  172. $content.=  $pervpagec.$page5leftc.$page4leftc.$page3leftc.$page2leftc.$page1leftc.'<span>'.$pagec.'</span>'.$page1rightc.
  173.  
  174. $page2rightc.$page3rightc.$page4rightc.$page5rightc.$nextpagec;
  175. $content.=  "</div>";
  176. }
  177.  
  178. } else {
  179. $titlenews = 'Ошибка! &raquo; ';
  180. $titles = ' &raquo; Ошибка!';
  181. $content = <<<HTML
  182. <div class="base btype2">
  183. <div class="heading">
  184. <h3><b><span>Ошибка</span></b></h3>
  185. </div>
  186. <div class="bci_block"><div class="bci_border"><div class="bci_cont">Категории нет</div></div></div>
  187. </div>            
  188. <a href="javascript:history.go(-1)" mce_href="javascript:history.go(-1)">Вернуться</a>
  189. HTML;
  190. }
  191. }
  192.  
  193. else
  194. {
  195. if($db->num_rows($squery)){
  196.  
  197. while($data = $db->get_array($squery)){
  198. $ycat = $db->get_array($db->query("SELECT * FROM ".PREFIX."_category WHERE alt_name='".$data['cat_name']."'"));
  199. $content .= '
  200. <div class="base btype2">
  201. <div class="heading">
  202. <h3><b><span><a href="/'.$data['cat_name'].'/'.$data['alt_name'].'.html">'.$data['title'].'</a></span></b></h3>
  203. </div>
  204. <div class="bci_block"><div class="bci_border"><div class="bci_cont">
  205. <table width="100%" border="0">
  206. <tr height="30px">';
  207. $content .= '<td width="15%" align="left"><strong>Категория:</strong>    <a href="/'.$ycat['alt_name'].'">'.$ycat['name'].'</a><div style="float:right;"><strong>Дата:</strong>&nbsp;'.date_smart($data['dates']).'</div></td>';
  208. $content .= '
  209. </tr>
  210. </table>
  211. <table width="100%" border="0">
  212. <tr>
  213. <td background="/template/images/mline.gif" height="1" colspan="2"></td>
  214. </tr>
  215. </table>'.$data['article'].'</div></div></div>';
  216. $content .= '</div>';
  217. }
  218. // Проверяем нужны ли стрелки назад
  219. if ($page != 1) $pervpage = '<a href=/page/1>Первая</a>  <a href=/page/'. ($page - 1) .'>Предыдущая</a>  ';
  220. // Проверяем нужны ли стрелки вперед
  221. if ($page != $total) $nextpage = '  <a href=/page/'. ($page + 1) .'>Следующая</a>  <a href=/page/' .$total. '>Последняя</a>';
  222.  
  223. // Находим две ближайшие станицы с обоих краев, если они есть
  224. if($page - 5 > 0) $page5left = ' <a href=/page/'. ($page - 5) .'>'. ($page - 5) .'</a>  ';
  225. if($page - 4 > 0) $page4left = ' <a href=/page/'. ($page - 4) .'>'. ($page - 4) .'</a>  ';
  226. if($page - 3 > 0) $page3left = ' <a href=/page/'. ($page - 3) .'>'. ($page - 3) .'</a>  ';
  227. if($page - 2 > 0) $page2left = ' <a href=/page/'. ($page - 2) .'>'. ($page - 2) .'</a>  ';
  228. if($page - 1 > 0) $page1left = ' <a href=/page/'. ($page - 1) .'>'. ($page - 1) .'</a>  ';
  229.  
  230. if($page + 5 <= $total) $page5right = '  <a href=/page/'. ($page + 5) .'>'. ($page + 5) .'</a>';
  231. if($page + 4 <= $total) $page4right = '  <a href=/page/'. ($page + 4) .'>'. ($page + 4) .'</a>';
  232. if($page + 3 <= $total) $page3right = '  <a href=/page/'. ($page + 3) .'>'. ($page + 3) .'</a>';
  233. if($page + 2 <= $total) $page2right = '  <a href=/page/'. ($page + 2) .'>'. ($page + 2) .'</a>';
  234. if($page + 1 <= $total) $page1right = '  <a href=/page/'. ($page + 1) .'>'. ($page + 1) .'</a>';
  235.  
  236. // Вывод меню если страниц больше одной
  237.  
  238. if ($total > 1)
  239. {
  240. Error_Reporting(E_ALL & ~E_NOTICE);
  241. $content.= "<div class=\"navigation\" align=\"center\" style=\"margin-bottom:10px; margin-top:10px;\">";
  242. $content.=  $pervpage.$page5left.$page4left.$page3left.$page2left.$page1left.'<span>'.$page.'</span>'.$page1right.
  243.  
  244. $page2right.$page3right.$page4right.$page5right.$nextpage;
  245. $content.=  "</div>";
  246. }
  247. } else {
  248. $titlenews = 'Ошибка! &raquo; ';
  249. $titles = ' &raquo; Ошибка!';
  250. $content = <<<HTML
  251. <div class="base btype2">
  252. <div class="heading">
  253. <h3><b><span>Ошибка</span></b></h3>
  254. </div>
  255. <div class="bci_block"><div class="bci_border"><div class="bci_cont">Статей нет</div></div></div>
  256. </div>            
  257. <a href="javascript:history.go(-1)" mce_href="javascript:history.go(-1)">Вернуться</a>
  258. HTML;
  259. }
  260.  
  261. }
  262.  
  263. ?>
2. Roler - 18 Июля, 2011 - 23:26:34 - перейти к сообщению
Jeez
Ох, я не думаю, что кто-то в этой каше разбираться будет.

Почитайте про MySQL, самые основы, простейшие туториалы, любое количество строк из одной таблицы можно извлечь одним запросом.
3. Jeez - 18 Июля, 2011 - 23:44:15 - перейти к сообщению
там не каша а много html кода и все подписано Не понял пытался невышло Нахмурился
4. Jeez - 19 Июля, 2011 - 08:55:51 - перейти к сообщению
для примера можно взять запрос
PHP:
скопировать код в буфер обмена
  1. $scatquery = $db->query("SELECT * FROM ".PREFIX."_sarticles WHERE moderated='1' AND cat_name='".$db->safesql($_GET['cat_name'])."' ORDER BY `id` DESC LIMIT $startc,$maxc");

и вывод
PHP:
скопировать код в буфер обмена
  1. elseif(empty($_GET['article_name']) && !empty($_GET['cat_name']))
  2. {
  3. if($db->num_rows($scatquery)){
  4. while($data = $db->get_array($scatquery)){
  5. $ycat = $db->get_array($db->query("SELECT * FROM ".PREFIX."_category WHERE alt_name='".$data['cat_name']."'"));
  6. $titlenews = ''.stripcslashes(trim($ycat['name'])).' &raquo; ';
  7. $titles = ' &raquo; '.stripcslashes(trim($ycat['name'])).'';
  8. $content .= '
  9. <div class="base btype2">
  10. <div class="heading">
  11. <h3><b><span><a href="/'.$data['cat_name'].'/'.$data['alt_name'].'.html">'.$data['title'].'</a></span></b></h3>
  12. </div>
  13. <div class="bci_block"><div class="bci_border"><div class="bci_cont">
  14. <table width="100%" border="0">
  15. <tr height="30px">';
  16. $content .= '<td width="15%" align="left"><strong>Категория:</strong>       <a href="/'.$ycat['alt_name'].'">'.$ycat['name'].'</a><div style="float:right;"><strong>Дата:</strong>&nbsp;'.date_smart($data['dates']).'</div></td>';
  17. $content .= '
  18. </tr>
  19. </table>
  20. <table width="100%" border="0">
  21. <tr>
  22. <td background="/template/images/mline.gif" height="1" colspan="2"></td>
  23. </tr>
  24. </table>'.$data['article'].'</div></div></div>';
  25. $content .= '</div>';
5. alxfro - 19 Июля, 2011 - 20:49:20 - перейти к сообщению
Просто не надо делать так:
$var = query ('select ....);
super_function ($var)...
Однако

когда можно сразу написать super_function (query('select...))...
Закатив глазки

вобщем каждая новая переменная занимает память.
а так flush(); вам в помощь.
Растерялся

 

Powered by ExBB FM 1.0 RC1