кол-во запросов к бд = 119

12
4F
На сайте с 13.01.2008
Offline
144
892

Привет всем. Суть темы заключается в следующем:

Есть ресурс (в подписи), при генерации главной страницы которого происходит 119 запросов к бд, что я считаю достаточно много для элементарных функций всего скрипта в целом. В поисках функций, который весь скрипт использует, я наткнулся на облако тегов... Если я убираю инклюд файл, который отвечает за вывод облака тегов, кол-во запросов к бд падает почти в 11 раз. Запросов становится всего 9. Облако тегов не основной элемент сайта и я его убрал, но всё же это облако всегда было неотъемлемой частью сайта и многим пользователям оно нравилось (ну понятно почему). Ниже я приведу код данного облака:

<div class="box">

<div class="boxinner">
<img src="images/tag_cloud.png" alt="облако тегов" />
<br /><br />
<div class="cloud">
<noindex><?
$tag_data = $db->queryArray("SELECT tag_id, tag_title FROM tag_list");

foreach($tag_data as $tag_info) {
$tag_data2 = $db->queryArray("SELECT count(tag_id) FROM tag_table where tag_id='".$tag_info['tag_id']."'");

foreach($tag_data2 as $tag_count)
$tag_our[$tag_info['tag_title']]= $tag_count['count(tag_id)'] ;
}

$minSize=8; //минимальный размер шрифта
$maxSize=21; //максимальный размер шрифта

$minWeight=min($tag_our); //минимальный вес тега
$maxWeight=max($tag_our); //максимальный вес тега

$tegi=array();

//вычислим размер шрифта тегов
foreach ($tag_our as $tag=>$tagWeight) {
//шрифт по логарифмическому закону
$font= floor( (log($tagWeight + 1) - log($minWeight + 1)) / (log($maxWeight + 1) - log($minWeight + 1)) * ($maxSize - $minSize) + $minSize );

//добавим в массив
$tegi[]='<a href="/tag/'.$tag.'" style="font-size:'.$font.'px">'.$tag.'</a>';
}

//теперрь перетасуем и выведем
shuffle($tegi);
echo implode(' ',$tegi);
?></noindex>
</div>
</div>
<span class="tt"></span>
<span class="bb"></span>
</div>

Отсюда основной вопрос. Каким образом можно сократить кол-во запросов к бд при генерации данного облака или как сделать кеширование (как предложил один человек) для данного элемента ?

Буду признателен за любые возможные варианты решения моей проблемы, заранее спасибо.

[Удален]
#1
4fun.fantasy:
Отсюда основной вопрос. Каким образом можно сократить кол-во запросов к бд при генерации данного облака или как сделать кеширование (как предложил один человек) для данного элемента ?

учением матчасти перед написанием веб сайтов

Dreammaker
На сайте с 20.04.2006
Offline
569
#2

Вместо

$tag_data = $db->queryArray("SELECT tag_id, tag_title FROM tag_list");

foreach($tag_data as $tag_info) {
$tag_data2 = $db->queryArray("SELECT count(tag_id) FROM tag_table where tag_id='".$tag_info['tag_id']."'");

foreach($tag_data2 as $tag_count)
$tag_our[$tag_info['tag_title']]= $tag_count['count(tag_id)'] ;
}

поставьте

$tag_data = $db->queryArray("SELECT tag_title, COUNT(*) as tag_count FROM tag_list, tag_table WHERE tag_list.tag_id = tag_table.tag_id GROUP BY tag_table.tag_id");


foreach($tag_data as $tags)
$tag_our[$tags['tag_title']]= $tags['tag_count'] ;

Если нет индекса по tag_id добавьте его.

За 100% работоспособность не ручаюсь, но с минимальными поправками должно работать.

p.s. Нет работать не будет, сейчас поправлю.

update: поправлено, можно пробовать.

[Удален]
#3

Dreammaker, а я только за попкорном пошел ....

Dreammaker
На сайте с 20.04.2006
Offline
569
#4
bearman:
Dreammaker, а я только за попкорном пошел ....

Сегодня праздник, можно и помочь. :)

frantic
На сайте с 09.02.2009
Offline
27
#5
4fun.fantasy:
119 запросов к бд

У вас там что то особенное ? Я генерил одним запросом. Если никак не сократить, то запускайте его раз в сутки, а результат пихайте в какой нибудь шаблон

P
На сайте с 08.03.2007
Offline
250
#6

Я бы собирал статистику не во время использования, а во время регистрации новой связи документа с тэгом, это всё сильно упростило бы. то есть в табличку с тэгами добавить счётчик их упоминания. Будет маленький запрос, возвращающий, скажем, 100 коротких записей. И даже это можно кэшировать - причём разными способами.

Dreammaker
На сайте с 20.04.2006
Offline
569
#7

Pilat, я боюсь что изменить структуру таблиц для ТС будет заоблачной трудностью. :)

Но ваш вариант более разумный.

4F
На сайте с 13.01.2008
Offline
144
#8

Код который написан в первом поте писал не я, движок сайта и всех дополнительных элементов писал опять же не я. Код представлен так, как его мне передал человек пол года назад. Поверьте, если бы я разбирался что к чему я не пришел бы сюда просить совета, печально что тов. bearman этого не понимает.

Dreammaker, спасибо большое, кол-во запросов стало 11, облако функционирует, всё отлично.

Dreammaker
На сайте с 20.04.2006
Offline
569
#9

4fun.fantasy, скажем так я понимаю мысль тов. bearmana - всё же это раздел для тех, кто может сам сделать, пусть и с чужой помощью, для тех кто не может есть раздел Работа для вебмастера. :)

update: кеширование всё же прикрутить я бы посоветовал. Оно будет очень не лишним.

[Удален]
#10

4fun.fantasy, да ничего печального, я и не на вас "наехал", а на чудо-криворучку автора. сайт неплохой кстати :) зачет проекту, редко тут увидишь не сраные жуймля, для и ворпресс

bearman добавил 04.04.2010 в 23:05

4fun.fantasy,

...

поправочка:

попробовал опустить

он знает про что я :)

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий