Пыха всегда с тобой

Добро пожаловать на Пыху!

Логин:
Пароль:
 

Нет прописки? Зарегистрируйся!

Новости

Мы в твиттере!
Мы вконтакте!
Мы на яндексе!

Краснодарское время: 26 Май, 2012, 12:07:34

Страниц: [1]
Печать
Автор Тема: Уменьшение количества запросов  (Прочитано 190 раз)
0 Пользователей и 1 Гость смотрят эту тему.
herotic    ↓ 
28 Январь, 2012, 03:43:47
НЕ ХУЕТА! ХУЕТА!

Карма: 0
Сообщений: 12
Сила слова: 0

Всем привет!
У меня есть следующая вещь:
Из базы в цикле вытягиваются данные, человеки, за которых можно проголосовать за или против. Ограничение только по айпи. Так вот, я задумал сделать так, что если пользователь уже голосовал, то сама кнопка для голосования не будет ему показываться, но я никак не могу сообразить как организовать это все дело так, чтобы не использовать запросы каждый раз в самом цикле, как это организовано сейчас у меня.
 
Подскажите, пожалуйста, как сделать так, чтобы выбрать из базы сначала все айпи-адреса и уже только потом вложенным циклом проверять или он есть в списке? То есть как уменьшить количество запросов?
 
Свой код привожу ниже:
 
PHP
<?php
 

        $result = mysql_query("SELECT * FROM people ".$where." ORDER ".$sortby."");
        $myrow = mysql_fetch_array($result);
       
        if (mysql_num_rows($result) > 0)
 
{
 

        $realip = getenv(HTTP_X_FORWARDED_FOR);
        if ($realip == ''){$realip = $_SERVER['REMOTE_ADDR'];}
       
 
        do
        {   
       
        if ($myrow['avatar'] == '-')
        {
            if ($myrow['sex'] == '1') {$avatar = 'images/man.png';}
            if ($myrow['sex'] == '0') {$avatar = 'images/woman.png';}
        }
        if ($myrow['avatar'] != '-') {$avatar = "timthumb.php?src=".$myrow['avatar']."&a=t&w=195&h=200&q=100";}
       
       
        $resultfindip = mysql_query("SELECT * FROM votestat WHERE peopleid='$myrow[id]' AND likedis='like' AND ipadress='$realip'",$db);
        if (mysql_num_rows($resultfindip) > 0) {$likehref = "";}
        else {$likehref = "<a class='like' name='$myrow[id]'>ХОРОШО! (<strong>$myrow[likes]</strong>)</a>";}
   
       
        $stroka='';
        if(($i+1)%4==0) $stroka='</tr><tr>';
        printf ("
          <td align='center' valign='middle' width='200'>
          <img src='$avatar' />
          <br />
          <strong>%s</strong><br />
          %s<br />
          <a href='comments.php?id=%s' class='comments fancybox.iframe'><img title='Отзывы' src='images/comments.png'></a>
          <a href='add_comment.php?id=%s' class='addcomment fancybox.iframe'><img title='Добавить отзыв' src='images/addcomments.png'></a>
          <br>
          $likehref
          <a class='dislike' name='%s'>ПЛОХО! (<strong>%s</strong>)</a>
          </td>
        $stroka
        "
,$myrow["posada"],$myrow["name"],$myrow["id"],$myrow["id"],$myrow["id"],$myrow["dislikes"]);
        $i++;
        }
        while ($myrow= mysql_fetch_array($result));
}
else
{
    echo '<br /><p align="center"><strong>У цій групі поки нікого немає!</strong></p>';
}
 
?>
Записан
AlexanderC    ↓ 
28 Январь, 2012, 07:19:26 , спустя 3 часа 35 минут 39 секунд
НЕ ХУЕТА! ХУЕТА!


Карма: 1
Сообщений: 140
Сила слова: 0.71

herotic- у меня после твоего херо-кода нервный тик...
Спустя 1 минуту 32 секунды добавил
JOIN
Записан

*Не всё  Windows™ что виснет, не всё  Linux что "да ну его..."
herotic    ↓ 
28 Январь, 2012, 07:45:50 , спустя 26 минут 24 секунды
НЕ ХУЕТА! ХУЕТА!

Карма: 0
Сообщений: 12
Сила слова: 0

А как это все заюзать?
Записан
AlexanderC    ↓ 
29 Январь, 2012, 01:13:51 , спустя 5 часов 28 минут 1 секунду
НЕ ХУЕТА! ХУЕТА!


Карма: 1
Сообщений: 140
Сила слова: 0.71

ну типо SELECT * FROM votestat LEFT JOIN people ON votestat.peapleid = peaple.id WHERE likedis='like' AND ipadress='$realip' ORDER BY .....
Записан

*Не всё  Windows™ что виснет, не всё  Linux что "да ну его..."
Givi    ↓ 
29 Январь, 2012, 07:15:29 , спустя 18 часов 1 минуту 38 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: Адекваты

Карма: 42
Сообщений: 2305
Сила слова: 1.82

herotic, в мусикель-запросе проверяй нет ли в базе уже такого АйПи, с которого запрошена страница и если есть, то возвращай какую-то метку типа "фолс" или 0.
Записан

Все, что говорят другие - неправда! До тех пор, пока ты сам в это не поверишь.
Если человек дурак, то... чур это не я!
artoodetoo    ↓ 
30 Январь, 2012, 10:18:51 , спустя 15 часов 3 минуты 22 секунды
НЕ ХУЕТА! ХУЕТА!

с особым цинизмом
Группа: в ухо

Карма: 124
Сообщений: 3805
Сила слова: 3.26

как сделать так, чтобы выбрать из базы сначала все айпи-адреса и уже только потом вложенным циклом проверять или он есть в списке?
я тебя умоляю, не надо выбирать все адреса. есть адрес текущего пользователя, вот этот адрес используй в запросе. если такой уже был (возвращено не 0 строк), то НЕ выводить форму голосования, а сразу результат.
 
и, кстати, отсеивать по IP глупо, т.к. у тысячи юзеров может быть один внешний IP. задача анонимного голосования в принципе не имеет решения, а только имитацию решения.
Записан
Страниц: [1]
Печать
 

Перейти в: