-
Вебмастеру
(
http://forum.oszone.net/forumdisplay.php?f=22)
оптимизация подключений к базе данных MySQL
у меня скрипт в среднем делает 50 == плюс -- минус 10 запросов к бд за один заход
это нормально или еще надо оптимизировать его ?
было до 100 запросов :teeth:
|
кэшируйте каким-нибудь мемкешем...
|
надо запросов ещо урезать
все явные дубли я убрал
но вот на таких запросах застрял основательна
вот такой
PHP код:
$sql2 = mysql_query("SELECT * FROM `users` where rang='0'");
$ur0=mysql_num_rows($sql2);
$sql3 = mysql_query("SELECT * FROM `users` where rang='1'");
$ur1=mysql_num_rows($sql3);
$sql4 = mysql_query("SELECT * FROM `users` where rang='2'");
$ur2=mysql_num_rows($sql4);
$sql5 = mysql_query("SELECT * FROM `users` where rang='3'");
$ur3=mysql_num_rows($sql5);
$sql6 = mysql_query("SELECT * FROM `users` where rang='4'");
$ur4=mysql_num_rows($sql6);
$sql7 = mysql_query("SELECT * FROM `users` where rang='5'");
$ur5=mysql_num_rows($sql7);
$sql8 = mysql_query("SELECT * FROM `users` where rang='6'");
$ur6=mysql_num_rows($sql8);
$sql9 = mysql_query("SELECT * FROM `users` where rang='7'");
$ur7=mysql_num_rows($sql9);
$sql20 = mysql_query("SELECT * FROM `users` where rang='8'");
$ur8=mysql_num_rows($sql20);
$sql21 = mysql_query("SELECT * FROM `users` where rang='9'");
$ur9=mysql_num_rows($sql21);
$sql22 = mysql_query("SELECT * FROM `users` where rang='10'");
$ur10=mysql_num_rows($sql22);
предложили урезать до
PHP код:
$sql2 = mysql_query("SELECT * FROM `users` where rang in (0,1,2,3,4,5,6,7,8,9,10)");
$ur0=mysql_num_rows($sql2);
switch($ur0['rang']) {
case 1: /* здесь действия для rang = 1 */ break;
case 2: /* здесь действия для rang = 2 */ break;
case 3: /* здесь действия для rang = 3 */ break;
// и т.д
}
но я так и не понял что здесь писать
PHP код:
case 1: /* здесь действия для rang = 1 */ break;
|
цель непонятна, там только строки считать нужно (судя по mysql_num_rows)?
|
PHP код:
$sql2 = mysql_query("SELECT * FROM `users` where rang='0'");
$ur0=mysql_num_rows($sql2);
echo " пользователей с рангом 0 $ur0 столькото";
//и т д
|
Код:
SELECT
COUNT(`rang`) AS `num`,
`rang`
FROM
`users`
WHERE
`rang` =< 10
GROUP BY
`rang`
внутри цикла while($row = ....) можно выводить
PHP код:
echo " пользователей с рангом {$row['rang']} - {$row['num']}";
|
я конечно извиняюсь за то что одно и тоже с разных сторон подсовываю но мне в цикле не надо
вот кусок кода который надо оптимизировать
PHP код:
<?=$lang['stats6'];?> //пользователей рангом
PHP код:
<?if($ur>=2){
$sql4 = db_query("SELECT * FROM ".$db_pref."users where rang='2'");
$ur2=mysql_num_rows($sql4);
?>
<tr>
<th align="left"> <?=$lang['stats6'];?> 2</th>
<th align="right"><?=$ur2;?> </th>
</tr>
<?}if($ur>=3){
$sql5 = db_query("SELECT * FROM ".$db_pref."users where rang='3'");
$ur3=mysql_num_rows($sql5);
?>
<tr>
<th align="left"> <?=$lang['stats6'];?> 3</th>
<th align="right"><?=$ur3;?> </th>
</tr>
<?}if($ur>=4){
$sql6 = db_query("SELECT * FROM ".$db_pref."users where rang='4'");
$ur4=mysql_num_rows($sql6);
?>
<tr>
<th align="left"> <?=$lang['stats6'];?> 4</th>
<th align="right"><?=$ur4;?> </th>
</tr>
<?}if($ur>=5){
$sql7 = db_query("SELECT * FROM ".$db_pref."users where rang='5'");
$ur5=mysql_num_rows($sql7);
?>
<tr>
<th align="left"> <?=$lang['stats6'];?> 5</th>
<th align="right"><?=$ur5;?> </th>
</tr>
|
Выполните запрос в панели MySQL, и увидите, что в результате все собрано, остается эти цифры рассовать по переменным в цикле (обычный разбор результата запроса) и выводить эти переменные.
|
Sham, покажите пожалуйста где моя ошибка
PHP код:
$sql=db_query("SELECT COUNT(`rang`) AS `num`,`rang` FROM `users` WHERE `rang` =< 10 GROUP BY `rang`");
while ($row = mysql_fetch_array($sql)) {//вот здесь выкидывает == Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in
echo " пользователей с рангом {$row['rang']} - {$row['num']}";
}
|
а что db_query отдает? Это вроде не родная функция. см. mysql_query.
если она массив отдает, то foreach ($sql as $row) вместо while
|
это подсчет обращений к базе
PHP код:
$queries_num = 0;
function db_query($sql)
{
$GLOBALS['queries_num']++;
return mysql_query($sql);
}
|
Время: 05:40.
© OSzone.net 2001-