Оптимизиция SQL запроса

12
T
На сайте с 22.02.2008
Offline
141
1405

Добрый вечер уважаемый форумчане, у меня возник вопрос по данному блоку, он формирует 2 выходные таблицы с колонкой популярных статей и колонкой популярных файлов, все они берутся из бд по количеству hits (просмотров или скачиваний) вот хотелось бы оптимизировать данный блок, знаний у меня к сожалению не хватает блок писал друг, единственное что понял что переменные strip1 и strip2 лишние их можно сделать просто strip?

Код ниже:

<?php

if (!defined('BLOCK_FILE')){Header("Location: ../index.php");exit;}
global $db,$prefix,$config,$block_cache; $block_cache = 1; $strip1 = 40; $strip2 = 40; $a = 1;$b = 1;$result = $db->sql_query("SELECT fid, title, hits FROM {$prefix}_files WHERE status='1' OR status='3' ORDER BY hits DESC LIMIT 10");
while(list($fid, $ftitle, $hits) = $db->sql_fetchrow($result)){$linkstrip = stripslashes($ftitle);if (strlen($linkstrip) > $strip1) {$linkstrip = substr($linkstrip, 0, $strip1);$linkstrip .= "...";
}@$files2 .= "<b>$a. </b><a href='index.php?module=Files&do=View&id=$fid' title='$ftitle'>".stripslashes($linkstrip)."</a><br />";$a++;}$result = $db->sql_query("SELECT nid, title, view FROM {$prefix}_news WHERE status='1' OR status='3' ORDER BY view DESC LIMIT 10");while(list($nid, $ntitle, $view) = $db->sql_fetchrow($result)){$linkstrip = stripslashes($ntitle);
if (strlen($linkstrip) > $strip2){$linkstrip = substr($linkstrip,0,$strip2);$linkstrip .= "...";}
@$files .= "<b>$b. </b><a href='index.php?module=News&do=View&id=$nid' title='$ntitle'>".stripslashes($linkstrip)."</a><br />";
$b++
;}
$result = $db->sql_query("SELECT * FROM {$prefix}_files");
@$num_files = mysql_num_rows($result);
$result = $db->sql_query("SELECT * FROM {$prefix}_news");
@$num_news = mysql_num_rows($result);
@$num_all = $num_news + $num_files;
$result = $db->sql_query("SELECT hits FROM {$prefix}_files");
while (list($hits) = $db->sql_fetchrow($result)){$hitsum = $hitsum + $hits;}$content = "<table width='100%' cellspacing='1' cellpadding='3'><tr><th width='50%' class='borderright1'>"._POPNEWS."</th><th>"._POPFILES."</th></tr><tr><td width='50%' class='borderright1' valign='top'>$files</td><td valign='top'>$files2</td></tr><tr><TD width='50%' class='borderright1' valign='top'><b>Всего файлов и новостей: $num_all</b></td><td valign='top'><b>Всего скачано: {$hitsum}</b></td></tr></table>";
?>
ewg777
На сайте с 04.06.2007
Offline
225
#1
@$num_all = $num_news + $num_files;

А сцобако зачем вначале?

З.Ы. null + null = null и ошибки не прятать надо, а обрабатывать.

T
На сайте с 22.02.2008
Offline
141
#2

ewg777, уважаемый я немного не понимаю о чём речь, можно подробней, только можно меня на учебники не посылать сейчас сессия времени читать нету, а хочется понять

для чего эта собачка? я так понимаю @$num_all = $num_news + $num_files; считает общее кол-во и файлов и новостей, но при чём тут ошибка и где она? Спасибо

[Удален]
#3

Troyan, простите, но ваш друг - адский говнокодер

bearman добавил 25.06.2009 в 18:54

<?php
if (!defined('BLOCK_FILE')){
Header("Location: ../index.php");exit;
}
global $db,$prefix,$config,$block_cache;
$block_cache = 1;
$strip1 = 40;
$strip2 = 40;
$a = 1;
$b = 1;
$result = $db->sql_query("SELECT fid, title, hits FROM {$prefix}_files WHERE status='1' OR status='3' ORDER BY hits DESC LIMIT 10");
while(list($fid, $ftitle, $hits) = $db->sql_fetchrow($result))
{
$linkstrip = stripslashes($ftitle);
if (strlen($linkstrip) > $strip1) {
$linkstrip = substr($linkstrip, 0, $strip1);
$linkstrip .= "...";
}
@$files2 .= "<b>$a. </b><a href='index.php?module=Files&do=View&id=$fid' title='$ftitle'>".stripslashes($linkstrip)."</a><br />";
$a++;
}
$result = $db->sql_query("SELECT nid, title, view FROM {$prefix}_news WHERE status='1' OR status='3' ORDER BY view DESC LIMIT 10");
while(list($nid, $ntitle, $view) = $db->sql_fetchrow($result)){
$linkstrip = stripslashes($ntitle);
if (strlen($linkstrip) > $strip2){
$linkstrip = substr($linkstrip,0,$strip2);$linkstrip .= "...";
}
@$files .= "<b>$b. </b><a href='index.php?module=News&do=View&id=$nid' title='$ntitle'>".stripslashes($linkstrip)."</a><br />";
$b++;
}
$result = $db->sql_query("SELECT * FROM {$prefix}_files");
@$num_files = mysql_num_rows($result);

$result = $db->sql_query("SELECT * FROM {$prefix}_news");
@$num_news = mysql_num_rows($result);

@$num_all = $num_news + $num_files;
$result = $db->sql_query("SELECT hits FROM {$prefix}_files");

while (list($hits) = $db->sql_fetchrow($result)){
$hitsum = $hitsum + $hits;
}

$content = "<table width='100%' cellspacing='1' cellpadding='3'><tr><th width='50%' class='borderright1'>"._POPNEWS."</th><th>"._POPFILES."</th></tr><tr><td width='50%' class='borderright1' valign='top'>$files</td><td valign='top'>$files2</td></tr><tr><TD width='50%' class='borderright1' valign='top'><b>Всего файлов и новостей: $num_all</b></td><td valign='top'><b>Всего скачано: {$hitsum}</b></td></tr></table>";
?>
получите отформатированный код, а другу скажите что если такое говно еще раз напишет, то ВЫ(вы мне обещаете) плюнете ему в лицо.

bearman добавил 25.06.2009 в 18:56

и добавьте, чтобы он шел учить матчасть

$result = $db->sql_query("SELECT * FROM {$prefix}_files");

@$num_files = mysql_num_rows($result);

$result = $db->sql_query("SELECT * FROM {$prefix}_news");
@$num_news = mysql_num_rows($result);

@$num_all = $num_news + $num_files;

такой ужас я еще не видел

$result = $db->sql_query("SELECT COUNT(*) FROM {$prefix}_files");

@$num_files = mysql_result($result,0,0);

$result = $db->sql_query("SELECT COUNT(*) FROM {$prefix}_news");
@$num_news = mysql_result($result,0,0);

@$num_all = $num_news + $num_files;
CR
На сайте с 21.11.2008
Offline
46
#4

3 минуты втыкал в код..

пойду погуляю

Web-developer. PM me or icq:239836
[Удален]
#5
$result = $db->sql_query("SELECT hits FROM {$prefix}_files");

while (list($hits) = $db->sql_fetchrow($result)){
$hitsum = $hitsum + $hits;
}

вот этот блок кода у меня в голове вообще не укладывается ... это чо интересно ... я понимаю что хотели, но ТАК это делать - минимум дибилизм

T
На сайте с 22.02.2008
Offline
141
#6

bearman, спасибо большое, хорошо я ему передам, но в более мягкой форме, он очень хороший друг, а по теме спасибо вам большое, то есть 1ый код получился самый оптимизированный верно?

[Удален]
#7
Troyan:
bearman, спасибо большое, хорошо я ему передам, но в более мягкой форме, он очень хороший друг, а по теме спасибо вам большое, то есть 1ый код получился самый оптимизированный верно?

на самом деле, то КАК ОН ЭТО сделал, можно только выбросить, а НАЗЫВАТЬ ЭТО КОДОМ ... ну :) промолчу раз он хороший друг )))))

такие вещи надо выбрасывать и переписывать сначала :)

ewg777
На сайте с 04.06.2007
Offline
225
#8
<?php
if (!defined('BLOCK_FILE')){
Header("Location: ../index.php");exit;
}
global $db,$prefix,$config,$block_cache;

Это как? Глобальные переменные для скрипта?

такие вещи надо выбрасывать и переписывать сначала
+1
T
На сайте с 22.02.2008
Offline
141
#9

ewg777, скорее всего да, сайт висит на готовой cms, я выложил код блока я так думаю глобал это глобальные переменные кэш точно в них есть =)

bearman, оу, ясно, просто у меня проблема с данным блоком, мой сайт создаёт нагрузку на хостинг поэтому я стараюсь сам оптимизировать запросы, но в силу своей неосведомлённости по данному вопросу пологаюсь на вас, если можно в pm или icq разобраться помочь как делать?

[Удален]
#10

Troyan, дайте пару минут

12

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