Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   оптимизация подключений к базе данных MySQL (http://forum.oszone.net/showthread.php?t=210053)

binders 28-06-2011 16:59 1703085

оптимизация подключений к базе данных MySQL
 
у меня скрипт в среднем делает 50 == плюс -- минус 10 запросов к бд за один заход
это нормально или еще надо оптимизировать его ?
было до 100 запросов :teeth:

Sham 29-06-2011 18:40 1703756

кэшируйте каким-нибудь мемкешем...

binders 29-06-2011 19:27 1703784

надо запросов ещо урезать

все явные дубли я убрал

но вот на таких запросах застрял основательна
вот такой
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; 


Sham 29-06-2011 19:48 1703797

цель непонятна, там только строки считать нужно (судя по mysql_num_rows)?

binders 29-06-2011 20:15 1703816

PHP код:

$sql2 mysql_query("SELECT * FROM `users` where rang='0'"); 
$ur0=mysql_num_rows($sql2);
echo 
" пользователей с рангом 0  $ur0 столькото";
//и т д 


Sham 29-06-2011 20:40 1703833

Код:

SELECT
    COUNT(`rang`) AS `num`,
    `rang`
FROM
    `users`
WHERE
    `rang` =<  10
GROUP BY
    `rang`

внутри цикла while($row = ....) можно выводить

PHP код:

echo " пользователей с рангом {$row['rang']} - {$row['num']}"


binders 29-06-2011 21:07 1703849

я конечно извиняюсь за то что одно и тоже с разных сторон подсовываю но мне в цикле не надо

вот кусок кода который надо оптимизировать
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">&nbsp;&nbsp;<?=$lang['stats6'];?> 2</th>
<th align="right"><?=$ur2;?>&nbsp;</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">&nbsp;&nbsp;<?=$lang['stats6'];?> 3</th>
<th align="right"><?=$ur3;?>&nbsp;</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">&nbsp;&nbsp;<?=$lang['stats6'];?> 4</th>
<th align="right"><?=$ur4;?>&nbsp;</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">&nbsp;&nbsp;<?=$lang['stats6'];?> 5</th>
<th align="right"><?=$ur5;?>&nbsp;</th>
</tr>


Sham 29-06-2011 21:52 1703873

Выполните запрос в панели MySQL, и увидите, что в результате все собрано, остается эти цифры рассовать по переменным в цикле (обычный разбор результата запроса) и выводить эти переменные.

binders 30-06-2011 16:45 1704468

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']}"



Sham 30-06-2011 17:16 1704506

а что db_query отдает? Это вроде не родная функция. см. mysql_query.

если она массив отдает, то foreach ($sql as $row) вместо while

binders 30-06-2011 18:08 1704550

Цитата:

Цитата Sham
а что db_query отдает? »

это подсчет обращений к базе
PHP код:

$queries_num 0
function 
db_query($sql)
{
   
$GLOBALS['queries_num']++;
   return 
mysql_query($sql);




Время: 05:40.

Время: 05:40.
© OSzone.net 2001-