- Автор темы
- #1
DLE 9.0 Изменил вывод последних комментариев, - добавил функцию вывода всех последних комментариев из новостей указанного пользователя.
Вывод информации выводится по ссылке _http://site.ru/index.php?do=lastcomments&author=Username
Всё было бы замечательно, но код очень сильно грузит mysql и в итоге сайт не загружается.
Привожу код lastcomments.php:
Тобишь в стандартном коде было изменено:
1. изменение данных для запроса
2. изменение запроса для нужной функции:
Прошу помочь оптимизировать код, ибо сам ничего в этом не шарю... А функция очень нужная!
Вывод информации выводится по ссылке _http://site.ru/index.php?do=lastcomments&author=Username
Всё было бы замечательно, но код очень сильно грузит mysql и в итоге сайт не загружается.
Привожу код lastcomments.php:
PHP:
<?php
if( ! defined( 'DATALIFEENGINE' ) ) {
die( "Hacking attempt!" );
}
$userid = intval( $_REQUEST['userid'] );
$_SESSION['referrer'] = $_SERVER['REQUEST_URI'];
$allow_list = explode( ',', $user_group[$member_id['user_group']]['allow_cats'] );
$where = array ();
if( $userid ) {
$where[] = PREFIX . "_comments.user_id='$userid'";
$user_query = "do=lastcomments&userid=" . $userid;
} else
{
if( isset( $_REQUEST['author'] ) ) $author = @$db->safesql( strip_tags( urldecode( $_REQUEST['author'] ) ) ); else $author = "";
if ($author!=="")
{
$user_query = "do=lastcomments&author=" . $author;
$where[] = PREFIX . "_post.autor='$author'";
}
else
$user_query = "do=lastcomments";
}
if( $allow_list[0] != "all" ) {
$join = "LEFT JOIN " . PREFIX . "_post ON " . PREFIX . "_comments.post_id=" . PREFIX . "_post.id ";
if( $config['allow_multi_category'] ) {
$where[] = PREFIX . "_post.category regexp '[[:<:]](" . implode( '|', $allow_list ) . ")[[:>:]]'";
} else {
$where[] = PREFIX . "_post.category IN ('" . implode( "','", $allow_list ) . "')";
}
} else {
$join = "";
}
if( $config['allow_cmod'] ) {
$where[] = PREFIX . "_comments.approve='1'";
}
if( count( $where ) ) {
$where = implode( " AND ", $where );
$where = "WHERE " . $where;
} else
$where = "";
if( $userid ) {
$sql_count = "SELECT COUNT(*) as count FROM " . PREFIX . "_comments " . $join . $where;
} else
{
if ($author!=="")
{
$sql_count = "SELECT COUNT(*) as count FROM " . PREFIX . "_post," . PREFIX . "_comments " . $join . $where;
}
else
$sql_count = "SELECT COUNT(*) as count FROM " . PREFIX . "_comments " . $join . $where;
}
$row_count = $db->super_query( $sql_count );
if( $row_count['count'] ) {
include_once ENGINE_DIR . '/classes/comments.class.php';
$comments = new DLE_Comments( $db, $row_count['count'], $config['comm_nummers'] );
$comments->query = "SELECT " . PREFIX . "_comments.id, post_id, " . PREFIX . "_comments.user_id, " . PREFIX . "_comments.date, " . PREFIX . "_comments.autor as gast_name, " . PREFIX . "_comments.email as gast_email, text, ip, is_register, name, " . USERPREFIX . "_users.email, news_num, " . USERPREFIX . "_users.comm_num, user_group, reg_date, signature, foto, fullname, land, icq, " . USERPREFIX . "_users.xfields, " . PREFIX . "_post.title, " . PREFIX . "_post.date as newsdate, " . PREFIX . "_post.alt_name, " . PREFIX . "_post.category, " . PREFIX . "_post.flag FROM " . PREFIX . "_comments LEFT JOIN " . PREFIX . "_post ON " . PREFIX . "_comments.post_id=" . PREFIX . "_post.id LEFT JOIN " . USERPREFIX . "_users ON " . PREFIX . "_comments.user_id=" . USERPREFIX . "_users.user_id " . $where . " ORDER BY id desc";
$comments->build_comments('comments.tpl', 'lastcomments' );
$comments->build_navigation('navigation.tpl', false, $user_query);
} else {
msgbox( $lang['all_info'], $lang['err_last'] );
}
?>
1. изменение данных для запроса
PHP:
if( $userid ) {
$where[] = PREFIX . "_comments.user_id='$userid'";
$user_query = "do=lastcomments&userid=" . $userid;
} else
{
if( isset( $_REQUEST['author'] ) ) $author = @$db->safesql( strip_tags( urldecode( $_REQUEST['author'] ) ) ); else $author = "";
if ($author!=="")
{
$user_query = "do=lastcomments&author=" . $author;
$where[] = PREFIX . "_post.autor='$author'";
}
else
$user_query = "do=lastcomments";
}
PHP:
if( $userid ) {
$sql_count = "SELECT COUNT(*) as count FROM " . PREFIX . "_comments " . $join . $where;
} else
{
if ($author!=="")
{
$sql_count = "SELECT COUNT(*) as count FROM " . PREFIX . "_post," . PREFIX . "_comments " . $join . $where;
}
else
$sql_count = "SELECT COUNT(*) as count FROM " . PREFIX . "_comments " . $join . $where;
}