[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Оптимизация запроса на подсчёт
web-monster
Вообщем есть левое меню которое привязывается к каждой странице там проверяется есть ли новые сообщения, друзья, новости, голоса и.т.д
Около 10 запросов, как лучше будет сделать как сейчас или можно ускорить всё это?
Вот как это всё выглядит:
//--------Проверка на новые сообщения--------
$res = mysql_query("SELECT * FROM message WHERE ToUser='$logname' AND DelToUser='' AND status='non'");
$r=mysql_num_rows($res);
$r=$r==0?$r="" : $r=$r;
echo "
<A HREF='inbox.php' class='linkform'>Мои сообщения</A>
$r<br>
"
;
//-------------Проверка на новых друзей-----------
$res = mysql_query("SELECT COUNT( ToUser ) AS count, ToUser, StatusTo FROM friends WHERE ToUser ='$logname' AND StatusTo='' GROUP BY ToUser");
$row=mysql_fetch_array($res);
$r=$row['count'];
if($r!=0)
{
echo "
<A HREF='friends.php?type=new' class='linkform'>Мои друзья</A> <span class='orange'>"
.$r."</span><br>
"
;
}
else
{
echo "
<A HREF='friends.php' class='linkform'>Мои друзья</A> <span class='orange'>"
.$r."</span><br>
"
;
}

//-------------Проверка подписанных дневников-----------
$res = mysql_query("SELECT * FROM diary_subscribe WHERE FromUser='$logname' AND start_time>time");
if(mysql_affected_rows()!=0){
echo "
<A HREF='diary_subscribe.php' class='linkform'>Мои подписки</A> <span class='orange'>!</span><br>
"
;
}

//-------------Проверка на новые новости-----------
$res = mysql_query("SELECT COUNT( ToUser ) AS count, ToUser, status FROM user_news WHERE ToUser ='$logname' AND status='non' GROUP BY ToUser");
$row=mysql_fetch_array($res);
$r=$row['count'];
echo "
<A HREF='user_news.php' class='linkform'>Мои новости</A> <span class='orange'>"
.$r."</span><br>
"
;

//-------------Проверка на новых гостей-----------
$res = mysql_query("SELECT COUNT( ToUser ) AS count, ToUser, status FROM visitors WHERE ToUser ='$logname' AND status='non' GROUP BY ToUser");
$row=mysql_fetch_array($res);
$r=$row['count'];
echo "
<A HREF='visitors.php' class='linkform'>Мои гости</A> <span class='orange'>"
.$r."</span><br>
"
;

//--------Проверка на новые комментарии--------
$res = mysql_query("SELECT COUNT( ToUser ) AS count, ToUser, status FROM comments WHERE ToUser ='$logname' AND status='non' GROUP BY ToUser");
$row=mysql_fetch_array($res);
$r=$row['count'];
echo "
<A HREF='comments.php' class='linkform'>Комментарии</A> <span class='orange'>"
.$r."</span><br>
</div>
"
;


//-------------Проверка на новые оценки-----------
$res = mysql_query("SELECT COUNT( ToUser ) AS count, ToUser, status FROM golosa WHERE ToUser ='$logname' AND status='non' GROUP BY ToUser");
$row=mysql_fetch_array($res);
$r=$row['count'];
echo "
<A HREF='vote.php' class='linkform'>Мои оценки</A> <span class='orange'>"
.$r."</span><br>
</div>





Спустя 7 часов, 51 минута, 10 секунд (7.05.2010 - 20:19) vagrand написал(а):
Ну например вот такой подход:

$res = mysql_query("SELECT * FROM message WHERE ToUser='$logname' AND DelToUser='' AND status='non'");
$r=mysql_num_rows($res);


В корне неверен, нужно делать так:

$res = mysql_query("SELECT count(*) as messagesNum FROM message WHERE ToUser='$logname' AND DelToUser='' AND status='non'");
$info = mysql_fetch_assoc($res);


В этом случае количество посчитает сам MYSQL и ему не придется выбирать все записи удовлетворяющие условию, нагружая тем самым хард и канал.
Тут еще важно убедится что существует составной ключ для таблицы message с полями как в условии where и в таком же порядке.

Спустя 4 часа, 38 минут, 56 секунд (8.05.2010 - 00:58) web-monster написал(а):
Мм да упустил в проверке сообщений. Просто это меню привязывается на каждой странице получается что минимум 7 запросов уже идёт..
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.