|
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, но как изменить не знаю, опыта мало
Может можно както объеденить запросы?
Последний раз редактировалось Soniks, 26.03.2008 в 10:29.
|
|