Помогите оптимизировать запрос к БД

Форум для авторов модов для phpBB 3.0.x. Здесь можно попросить помощи в разработке у коллег.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Аватара пользователя
FEAR93
Former team member
Сообщения: 666
Стаж: 17 лет 11 месяцев
Откуда: Кривой Рог, Украина
Благодарил (а): 22 раза
Поблагодарили: 76 раз

Помогите оптимизировать запрос к БД

Сообщение FEAR93 »

Выдирал из нескольких модов вывод количества предупреждений и информацию про бан пользователя. Вот что получилось :
в viewtopic.php

перед

Код: Выделить всё

unset($id_cache);
добавил:

Код: Выделить всё

// BEGIN BAN TEST
$sql = 'SELECT b.*, u.user_id
	FROM ' . BANLIST_TABLE . ' b, ' . USERS_TABLE . ' u
	WHERE (b.ban_end >= ' . time() . '
		OR b.ban_end = 0)';

$result = $db->sql_query($sql);

$ban_list = array();
while ($row2 = $db->sql_fetchrow($result))
{
	$ban_list[] = $row2['ban_userid'];
}
$db->sql_freeresult($result);
// END BAN TEST
и после :

Код: Выделить всё

'U_SEARCH'		=> $user_cache[$poster_id]['search'],
это

Код: Выделить всё

'S_USERID_BANNED' => (in_array($poster_id, $ban_list)) ? true : false,
.

В viewtopic_body.html

Добавил

Код: Выделить всё

<!-- IF postrow.S_USERID_BANNED --><dd><strong><span style="background-color: #ca6000; color: #000000;">Статус:</span> </strong><span style="color: #ff0000;"><b> {L_CURRENTLY_BANNED}</b></span></dd>
		<!-- ELSEIF not postrow.POSTER_WARNINGS eq 0 --><dd><strong><span style="background-color: #ca6000; color: #000000;">{L_WARNINGS}:</strong></span> <!-- ENDIF --> 
		<!-- IF postrow.S_USERID_BANNED == true --><!-- ELSEIF postrow.POSTER_WARNINGS == 0 --><!-- ENDIF -->
		<!-- IF postrow.S_USERID_BANNED == true --><!-- ELSEIF postrow.POSTER_WARNINGS == 1 --><b>{postrow.POSTER_WARNINGS}</b></dd><!-- ENDIF -->
		<!-- IF postrow.S_USERID_BANNED == true --><!-- ELSEIF postrow.POSTER_WARNINGS == 2 --><b>{postrow.POSTER_WARNINGS}</b></dd><!-- ENDIF -->
		<!-- IF postrow.S_USERID_BANNED == true --><!-- ELSEIF postrow.POSTER_WARNINGS == 3 --><span style="color: #FF0000;"><b>{postrow.POSTER_WARNINGS}</b></span></dd><!-- ENDIF -->
		<!-- IF postrow.S_USERID_BANNED == true --><!-- ELSEIF postrow.POSTER_WARNINGS == 4 --><span style="color: #FF8040;"><b>{postrow.POSTER_WARNINGS}</b></span></dd><!-- ENDIF -->
		<!-- IF postrow.S_USERID_BANNED == true --><!-- ELSEIF postrow.POSTER_WARNINGS == 5 --><span style="color: #FFFFFF;"><b>{postrow.POSTER_WARNINGS}</b></span></dd><!-- ENDIF -->
		<!-- IF postrow.S_USERID_BANNED == true --><!-- ELSEIF postrow.POSTER_WARNINGS == 6 --><span style="color: #FFFFFF;"><b>{postrow.POSTER_WARNINGS}</b></span></dd><!-- ENDIF -->
		<!-- IF postrow.S_USERID_BANNED == true --><!-- ELSEIF postrow.POSTER_WARNINGS == 7 --><span style="color: #FFFFFF;"><b>{postrow.POSTER_WARNINGS}</b></span></dd><!-- ENDIF -->
Помогите сделать кэш на запрос к БД и возможно ли это ? А то постоянно падает сервер, с ошибкой 503.

Добавлено спустя 13 минут 12 секунд:
Или подправить это всё.
Последний раз редактировалось FEAR93 12.10.2009 18:57, всего редактировалось 2 раза.
Аватара пользователя
Mr. Anderson
phpBB Guru
phpBB Guru
Сообщения: 7522
Стаж: 22 года 6 месяцев
Откуда: СССР
Благодарил (а): 6 раз
Поблагодарили: 154 раза

Re: Помогите оптимизировать зарос в БД

Сообщение Mr. Anderson »

Читаю и не пойму - что такое ЗАРОС? Кто зарос? :)
Аватара пользователя
FEAR93
Former team member
Сообщения: 666
Стаж: 17 лет 11 месяцев
Откуда: Кривой Рог, Украина
Благодарил (а): 22 раза
Поблагодарили: 76 раз

Re: Помогите оптимизировать запрос в БД

Сообщение FEAR93 »

:D "Запрос" Исправил.
Аватара пользователя
Палыч
Former team member
Сообщения: 9683
Стаж: 20 лет 4 месяца
Откуда: Питер
Благодарил (а): 3 раза
Поблагодарили: 454 раза

Re: Помогите оптимизировать запрос к БД

Сообщение Палыч »

FEAR93
а u.user_id нафига?
Не все то WINDOWS, что висит... phpBB только учусь.
ICQ, email, ЛС - только для личных сообщений. Вопросы по phpbb только на форумах. По найму не работаю.
Аватара пользователя
FEAR93
Former team member
Сообщения: 666
Стаж: 17 лет 11 месяцев
Откуда: Кривой Рог, Украина
Благодарил (а): 22 раза
Поблагодарили: 76 раз

Re: Помогите оптимизировать запрос к БД

Сообщение FEAR93 »

Код был взят с мода, который прошел валидацию на phpbb.com. Наверное, проверяется забанен ли пользователь, по его id.
Аватара пользователя
Палыч
Former team member
Сообщения: 9683
Стаж: 20 лет 4 месяца
Откуда: Питер
Благодарил (а): 3 раза
Поблагодарили: 454 раза

Re: Помогите оптимизировать запрос к БД

Сообщение Палыч »

Бред....

Код: Выделить всё

// BEGIN BAN TEST
	$sql = 'SELECT ban_userid, ban_exclude
		FROM ' . BANLIST_TABLE . '
		WHERE (ban_end >= ' . time() . '
		OR ban_end = 0)';
	  
	$result = $db->sql_query($sql);
	$ban_list = array();
	while ($row2 = $db->sql_fetchrow($result))
	{
		if (!$row2['ban_exclude'])
		{
			$ban_list[] = $row2['ban_userid'];
		}	
	}
	$db->sql_freeresult($result);
// END BAN TEST

Код: Выделить всё

		'S_USERID_BANNED' => (in_array($poster_id, $ban_list)) ? true : false,

Код: Выделить всё

		<!-- IF postrow.S_USERID_BANNED --><dd><strong><span style="color: #FF0000;"><b> {L_CURRENTLY_BANNED}</b></span></dd>
		<!-- ELSEIF postrow.POSTER_WARNINGS --><dd><strong><span style="background-color: #ca6000; color: #000000;">{L_WARNINGS}:{postrow.POSTER_WARNINGS}</strong></span></dd>
		<!-- ENDIF -->
Не все то WINDOWS, что висит... phpBB только учусь.
ICQ, email, ЛС - только для личных сообщений. Вопросы по phpbb только на форумах. По найму не работаю.
Аватара пользователя
FEAR93
Former team member
Сообщения: 666
Стаж: 17 лет 11 месяцев
Откуда: Кривой Рог, Украина
Благодарил (а): 22 раза
Поблагодарили: 76 раз

Re: Помогите оптимизировать запрос к БД

Сообщение FEAR93 »

Спасибо,Палыч, будуть пробовать.

Вернуться в «Для авторов (phpBB 3.0.x)»