Снова Mysql and PHP

[Удален]
708

Ребята снова весь в мучениях :( скриптик нарыл, вообщем ужас как сайт вешает :( чё тока не пробовал делать бестолку. Может кто в силах изменить запросы?

<?php


if(!defined("DNREAD")) exit();
global $db,$basepref;
$my_upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯ";
$my_lower = "abcdefghijklmnopqrstuvwxyzабвгдеёжзийклмнопрстуфхцчшщьыъэюя";


$num_title=30; // Количество выводимых слов в облаке
$home_title_mod="news"; // МОД ключевых слов на главной станице (photos | news | article | blog)
$font1="style='font-size: 18px;font-weight: bold;'"; // Приращение величины шрифта для 1 места по количеству вхождений
$font2="style='font-size: 14px;font-weight: bold;'"; // Приращение величины шрифта для 2 места по количеству вхождений
$font3="style='font-size: 11px;'"; // Приращение величины шрифта для 3 места по количеству вхождений
$font4="style='font-size: 9px;'"; // Приращение величины шрифта для 4 места по количеству вхождений
$font5="style='font-size: 8px;font-style: italic;'"; // Приращение величины шрифта для 5 места по количеству вхождений


//==========================//
// Дальше ничего не меняем! //
//==========================//

$bt="";
if ($dn=="news") { $sql = $db->query("SELECT title FROM ".$basepref."_news"); }

if($db->numrows($sql)>0){
while ($item = $db->fetchrow($sql)) {
$pars = $item['title'];
$temp=explode(",",$pars);
for ($i=0;$i<count($temp);$i++) { $title_list[]=$temp[$i]; }
}
for($i=0;$i<count($title_list);$i++) {
$isset_key=0;
for ($n=0;$n<count($title_list);$n++) {
if ($title[$n]['word']==$title_list[$i]) { $isset_key=1; }
}
if ($isset_key==0) {
$num=array_keys($title_list, $title_list[$i]);
$title[$i]['num']=count($num);
$title[$i]['word']=$title_list[$i];
}

}
$title = multi_sort($title,$key = 'num');
if (count($title)<$num_title) { $num_title=count($title); } else { $title = array_chunk($title, $num_title); $title = $title[0]; }
$max_num = $title[0]['num'];

$rand_key=range(0,$num_title-1);
shuffle($rand_key);

for ($i=0;$i<$num_title;$i++) {
if ($title[$rand_key[$i]]['num']*100/$max_num<20) { $title[$rand_key[$i]]['font']=$font5; }
if ($title[$rand_key[$i]]['num']*100/$max_num>20 AND $title[$rand_key[$i]]['num']*100/$max_num<40) { $title[$rand_key[$i]]['font']=$font4; }
if ($title[$rand_key[$i]]['num']*100/$max_num>40 AND $title[$rand_key[$i]]['num']*100/$max_num<60) { $title[$rand_key[$i]]['font']=$font3; }
if ($title[$rand_key[$i]]['num']*100/$max_num>60 AND $title[$rand_key[$i]]['num']*100/$max_num<80) { $title[$rand_key[$i]]['font']=$font2; }
if ($title[$rand_key[$i]]['num']*100/$max_num>80) { $title[$rand_key[$i]]['font']=$font1; }
$bt .= "<span ".$title[$rand_key[$i]]['font']."><a href='/index.php?dn=".$dn."&re=search&sea=".$title[$rand_key[$i]]['word']."' title='".$title[$rand_key[$i]]['num']."'>".$title[$rand_key[$i]]['word']."</a></span>&nbsp; &nbsp;";
}
}

// Функция сортировки многомерного массива по ключу by Kotovich
function multi_sort($array, $akey)
{
function compare($a, $b)
{
global $key;
if ($a[$key]<$b[$key]){
$varcmp = "1";
return $varcmp;
}
elseif ($a[$key]>$b[$key]){
$varcmp = "-1";
return $varcmp;
}
elseif ($a[$key]==$b[$key]){
$varcmp = "0";
return $varcmp;
}
}
usort($array, "compare");
return $array;
}


function my_strtoupper ($s) {
global $my_upper, $my_lower;
return strtr ($s, $my_lower, $my_upper);
}
function my_strtolower ($s) {
global $my_upper, $my_lower;
return strtr ($s, $my_upper, $my_lower);
}

function check_uppercase($mesg)
{
global $max_cap_letters, $my_upper;
if ($max_cap_letters)
{
$l = strlen ($mesg);
$t_u = 0;
for ($i = 0; $i < $l; $i++)
{
if (strstr ($my_upper, substr ($mesg, $i, 1)) !== false) $t_u++;
}
if ($t_u > $max_cap_letters) $mesg = my_strtolower ($mesg);
}
return $mesg;
}

return notslashes($bt);
?>
DU
На сайте с 20.10.2006
Offline
105
#1
KosoyRoman:
Ребята снова весь в мучениях :( скриптик нарыл, вообщем ужас как сайт вешает :( чё тока не пробовал делать бестолку. Может кто в силах изменить запросы?

Все читать лень. Но то что видно сразу: 1. Использовать кэширование. 2. SELECT title FROM ".$basepref."_news" - ограничить к-во новостей

R
На сайте с 20.02.2006
Offline
117
#2
DIMON-UA:
2. SELECT title FROM ".$basepref."_news" - ограничить к-во новостей

Условием и/или LIMIT

DI
На сайте с 03.01.2007
Offline
123
#3

LIMIT не поможет, он ограничивает результат выборки, т.е. нагрузка не изменится. Разве что while будет меньше гоняться, но насколько это критично в данном случае -

DIMON-UA:
Все читать лень
Высказывание идиотского утверждения требует на порядок меньше усилий, чем его последовательное и обоснованное опровержение и более того, иногда это опровержение вообще невозможно. © (http://zhurnal.lib.ru/s/shapiro_m_a/raspidiota.shtml)
grey109
На сайте с 15.06.2005
Offline
180
#4

Индексы для mysql созданы?

А вообще, соглашусь с DIMON-UA - формируй облако слов раз в сутки, по крону, и делай include сформированных данных из скрипта.

A
На сайте с 05.11.2005
Offline
111
#5

кеш помогает 100%. запросы не сильно динамические => лечится кроном по нужному запросу 1-2 раза в сутки, а результат уже можно вклеивать так часто, как нужно!

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий