Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вычисление места в рейтинге
 
 автор: Dota   (07.08.2008 в 07:59)   письмо автору
 
 

Вычисляем место в рейтинге...


$count=$id_site; //id сайта в базе.
$ttop=1;
$result=mysql_query("SELECT id FROM base_top WHERE tod_host>0 ORDER BY tod_host DESC");
while ($row = mysql_fetch_array($result) ) {
$iidd=$row["id"];
if ($iidd=="$count") {$top_me="$ttop";}
$ttop++;
}


Переменная $top_me = место сайта в рейтинге по количеству tod_host (хостов сегодня).
Я знаю, что код не логичный и не правильный. Но более ничего придумать не мог. Можно ли сделать запрос к базе более корректный? Посредством count() к примеру.

  Ответить  
 
 автор: DjDance   (07.08.2008 в 09:00)   письмо автору
 
   для: Dota   (07.08.2008 в 07:59)
 

Простой SELECT, как этот работает быстрее всего. А вот начиная добавлять в него count(), MAX(), MIN() и т.д. ты только будешь его замедлять, причем при большой ДБ в десятки раз (сам на этом попался в свое время). Так что ничего лучше и надежнее простых запросов нет. :)

Да, и в коде лучше убрать лишние кавычки, они не нужны, типа if ($iidd == "$count") заменить на if ($iidd == $count).

  Ответить  
 
 автор: mechanic   (07.08.2008 в 10:37)   письмо автору
 
   для: DjDance   (07.08.2008 в 09:00)
 

>начиная добавлять в него count(), MAX(), MIN() и т.д. ты только будешь его замедлять

а то, что запрос выбирает кучу ненужных рядов, это ничего? если запрошенный сайт в самом низу рейтинга, выберется вся таблица! причем она еще и сортируется! и НЕ ПО КЛЮЧУ!
на tod_host рекомендуется сделать индекс, а запрос написать так
select count(*) as position from base_top where tod_host > 0 order by tod_host desc

ради интереса также можно провести замеры производительности

  Ответить  
 
 автор: Dota   (08.08.2008 в 15:36)   письмо автору
 
   для: mechanic   (07.08.2008 в 10:37)
 

На tod_host индекс есть. А как можно провести замеры производительности?

  Ответить  
 
 автор: mechanic   (08.08.2008 в 15:57)   письмо автору
 
   для: Dota   (08.08.2008 в 15:36)
 

создать массив с адресами сайтов для вычисления рейтинга, прогонять массив каждым способом, делая замер времени работы скрипта..
способы например такие:
- запрос с count(*)
- запрос с * с последующей обработкой в пхп

  Ответить  
 
 автор: Dota   (08.08.2008 в 17:18)   письмо автору
 
   для: mechanic   (08.08.2008 в 15:57)
 

Запрос
select count(*) as position from base_top where tod_host > 0 order by tod_host desc

возвращает количество сайтов у которых tod_host>0... А дальше?

  Ответить  
 
 автор: Gendalf   (16.08.2008 в 19:23)   письмо автору
 
   для: Dota   (08.08.2008 в 17:18)
 

вместо ноля, я так понял, вам нужно подставлять количество хостов у сайта, для которого требуется определить положение в рейтинге

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования