Показать сообщение отдельно
Flint2000 вне форума      Старый Уменьшение Количества Запросов В Модуле Pages #1  
Flint2000
Новенький
Регистрация: 01.02.2007
Сообщения: 27


Пожаловаться на это сообщениеОтветить с цитированием

Посмотреть профиль Отправить персональное сообщение для Flint2000 Найти все сообщения от Flint2000 Добавить Flint2000 в список друзей  
21.03.2008, 18:08

Вот такая трабла: у меня модуль Pages с хаком от xRay т.е. неограниченная вложеность категорий.
У меня в одной категории 59 под категорий и соответственно в каждой под категории более 3 под-под категорий - небу увлекаться подсчетом. Вообщем в таблице nuke_rupages_categories 120 записей. и при выводе данных по функции list_pages_categories количество запросов к базе 116, соответственно при добавлении под категорий количество запросов будет увеличиваться. Помогите пожалуйста с оптимизацией єтой функции.
PHP код:
 function list_pages_categories($cid$nach) { 
global 
$prefix$db$sitename$admin$multilingual$module_name$description$parentid$module_title$admin_file$number$show__all_docs$subkatnumber$show_signature$show_date$show_counter$page_img$cat_img$subcat_img$subcat_sub_img$page_title;
include(
"header.php");
if (! 
$nach):
$nach=0;
endif;
 
title("$page_title");
OpenTable();
$sql "SELECT title, description, parentid FROM ".$prefix."_rupages_categories WHERE cid='$cid'";
$result $db->sql_query($sql);
$row $db->sql_fetchrow($result);
$rtitle=getparentlink($parentid$page_title);
echo 
"<center><b>$row[rtitle]</b><br>$row[description]<hr size=\"1\"></center>";
//xRay
$result21 $db->sql_query("select cid, title, description from ".$prefix."_rupages_categories where parentid=$cid order by title");
$numrows0 $db->sql_numrows($result21);
while(list(
$cid1$stitle1$description1) = $db->sql_fetchrow($result21)) {
 
echo 
"<font class=\"option\">$cat_img <a href=\"modules.php?name=$module_name&pa=list_pages_categories&cid=$cid1\">$stitle1</a>";
if (
$subkatnumber == 1) {
$result31 $db->sql_query("select pid from ".$prefix."_rupages where cid=$cid1");
$numrows1 $db->sql_numrows($result31);
echo 
"($numrows1)";
}
echo 
"</font><br>$description1<br>";
 
 
$result22 $db->sql_query("select cid, title, description from ".$prefix."_rupages_categories where parentid=$cid1 order by title");
$numrows01 $db->sql_numrows($result22);
while(list(
$cid2$stitle2$description2) = $db->sql_fetchrow($result22)) {
 
$result8 $db->sql_query("select cid, title from ".$prefix."_rupages_categories where parentid=$cid2");
$numsubcat $db->sql_numrows($result8);
if (
$numsubcat==0)
{
echo 
"<font class=\"content\"> $subcat_img <a href=\"modules.php?name=$module_name&pa=list_pages_categories&cid=$cid2\">$stitle2</a><br>";
}
else
{
echo 
"<font class=\"content\"> $subcat_sub_img <a href=\"modules.php?name=$module_name&pa=list_pages_categories&cid=$cid2\">$stitle2</a><br>";
}
 
if (
$subkatnumber == 1) {
$result31 $db->sql_query("select pid from ".$prefix."_rupages where cid=$cid2");
$numrows2 $db->sql_numrows($result31);
echo 
"($numrows2)<br>";
}
}
 
}
if (
$numrows0!=0) echo "<br><hr size=\"1\">";
//xRay
 
$sql1 "SELECT pid, title, subtitle, clanguage, page_header FROM ".$prefix."_rupages WHERE active='1' AND cid='$cid' ORDER BY title";
$result1=$db->sql_query($sql1);
$kolvo=mysql_affected_rows();
$kon=$nach+$number;
$sql "SELECT pid, title, subtitle, clanguage, page_header, signature, counter, date FROM ".$prefix."_rupages WHERE active='1' AND cid='$cid' ORDER BY title LIMIT $nach , $kon";
 
$result $db->sql_query($sql);
 
 
 
while (
$row $db->sql_fetchrow($result)) {
$pid $row[pid];
$title $row[title];
$subtitle $row[subtitle];
$clanguage $row[clanguage];
$header $row[page_header];
if (
$multilingual == 1) {
$the_lang "<img src=\"images/language/flag-$clanguage.png\" hspace=\"3\" border=\"0\" height=\"10\" width=\"20\">";
} else {
$the_lang "";
}
if (
$subtitle != "") {
$subtitle "<br>$subtitle";
} else {
$subtitle "";
}
if (
is_admin($admin)) {
echo 
"$page_img $the_lang <a href=\"modules.php?name=$module_name&pa=showpage&pid=$pid\"><b>$title</b></a>$subtitle<br>$header<br>";
 
if (
$show_signature==1) echo "<font class='pagesdescr'>"._PAUTHOR.": ".$row[signature]."</font><br>";
if (
$show_counter==1) echo "<font class='pagesdescr'>"._PCOUNTER.": <b>".$row[counter]."</b> </font>";
$dtp=explode(" ",$row[date]);
$datepbl $dtp[0];
if (
$show_date==1) echo "<font class='pagesdescr'>"._PDATE.": ".$datepbl."</font>";
 
echo 
"<br>[ <a href=\"".$admin_file.".php?op=pages_edit&pid=$pid\">"._EDIT."</a> | <a href=\"".$admin_file.".php?op=pages_change_status&pid=$pid&active=1\">"._DEACTIVATE."</a> | <a href=\"".$admin_file.".php?op=pages_delete&pid=$pid\">"._DELETE."</a> ]";
echo 
"<br><br>";
} else {
echo 
"$page_img $the_lang <a href=\"modules.php?name=$module_name&pa=showpage&pid=$pid\"><b>$title</b></a> $subtitle<br>$header<br>";
 
if (
$show_signature==1) echo "<font class='pagesdescr'>"._PAUTHOR.": ".$row[signature]."</font><br>";
if (
$show_counter==1) echo "<font class='pagesdescr'>"._PCOUNTER.": <b>".$row[counter]."</b> </font>";
$dtp=explode(" ",$row[date]);
$datepbl $dtp[0];
if (
$show_date==1) echo "<font class='pagesdescr'>"._PDATE.": ".$datepbl."</font>";
echo 
"<br><br>";
}
}
 
$n=$kolvo/$number;
if (
$kolvo/$number){
$n++;
}
 
if (
$n>=2)
{
$count=0;
echo 
"<center><b>"._PAGEN."</b><br><br>|";
for (
$i=1;$i<=$n;$i++){
 
echo 
" ";
echo 
"<a href=\"modules.php?name=$module_name&pa=list_pages_categories&cid=$cid&nach=$count\">$i</a>";
echo 
" |";
$count=$count+$number;
}
}
if (
$show__all_docs==1) echo "</center><br>"._ALLDOCS." <b>$kolvo</b>";
 
 
if (
is_admin($admin)) {
$sql "SELECT pid, title, subtitle, clanguage FROM ".$prefix."_rupages WHERE active='0' AND cid='$cid' ORDER BY date";
$result $db->sql_query($sql);
echo 
"<br><br><b>"._YOURADMINLIST."</b><br><br>";
echo 
"<blockquote>";
while (
$row $db->sql_fetchrow($result)) {
$pid $row[pid];
$title $row[title];
$subtitle $row[subtitle];
$clanguage $row[clanguage];
if (
$multilingual == 1) {
$the_lang "<img src=\"images/language/flag-$clanguage.png\" hspace=\"3\" border=\"0\" height=\"10\" width=\"20\">";
} else {
$the_lang "";
}
if (
$subtitle != "") {
$subtitle "<br>$subtitle";
} else {
$subtitle " ";
}
echo 
"<strong><big>·</big></strong> $the_lang <a href=\"modules.php?name=$module_name&pa=showpage&pid=$pid\"><b>$title</b></a>$subtitle<br>[ <a href=\"".$admin_file.".php?op=pages_edit&pid=$pid\">"._EDIT."</a> | <a href=\"".$admin_file.".php?op=pages_change_status&pid=$pid&active=0\">"._ACTIVATE."</a> | <a href=\"".$admin_file.".php?op=pages_delete&pid=$pid\">"._DELETE."</a> ]<br><br>";
}
 
}
echo 
"<center>[ <a href=\"java script:history.go(-1)\">"._PBACK."</a> | <a href=\"modules.php?name=$module_name\">"._PHOME."</a> ]</center>";
CloseTable();
include(
"footer.php");

Знаю что вся загвоздка в операторе while, но как изменить не знаю, опыта мало
Может можно както объеденить запросы?