помогите рационализироавть mysql запрос

C
На сайте с 16.04.2009
Offline
7
488

//берем название самого популярного дневника, относительную ссылку на этот дневник

$qry = mysql_query("SELECT blog_shortname, blog_siteurl

FROM evo_blogs

ORDER BY blog_user_rate DESC

LIMIT 0 , 15");

$name = mysql_fetch_assoc($qry);

?>

<--выводим название дневника, нажимая на него, переходим к нему самому-->

<a href="http://bloodtar.ru/<?php echo $name["blog_siteurl"];?>"><?php echo $name["blog_shortname"]; ?> </a>

фрагмент кода выдает:

<a href="http://bloodtar.ru/u/crecker/index.php">Crecker</a>

требуется вывести вертикально 15 таких дневников со ссылками по убыванию рейтинга.

я могу тупо сделать 15 подобных запросов(фрагмент кода)

Подскажите пожалуйста, как вывести дневники рационально, и при меньшей нагрузке на сервер

мир вам и счастье
embo
На сайте с 05.12.2008
Offline
24
#1

$res = mysql_query($qry);
while ($row = mysql_fetch_object($res)) {
print '<a href="http://bloodtar.ru/'.$row->blog_siteurl.'">'.$row->blog_shortname.'</a><br />';
}
Плавно двигаемся от сапы к статьям (http://miralinks.ru/users/registration/from:4223)
[Удален]
#2

Или mysql_fetch_array($res, MYSQL_ASSOC)

использовать почти также: $row['blog_shortname'] вместо $row->blog_shortname

Слава Шевцов
На сайте с 23.07.2005
Offline
370
#3
creker:
требуется вывести вертикально 15 таких дневников со ссылками по убыванию рейтинга.
я могу тупо сделать 15 подобных запросов(фрагмент кода)
Подскажите пожалуйста, как вывести дневники рационально, и при меньшей нагрузке на сервер

Разбить таблицу на две (с фиксированой шириной столбцов и плавающей). Тупо сделать 1 запрос с сортировкой по рейтингу и 15 запросов на доп. данные, с кешированием через memcached 🍻

$qry = mysql_query("SELECT blog_id FROM evo_blogs ORDER BY blog_user_rate DESC LIMIT 0 , 15");

while ($rec = mysql_fetch_row($qry))
{
$qry1 = mysql_query("SELECT blog_shortname, blog_siteurl FROM evo_blogs1 WHERE blog_id = $rec[0] LIMIT 1");
$row = mysql_fetch_row($qry1);
print '<a href="http://bloodtar.ru/'.stripslashes($row[1]).'">'.$row[0].'</a><br />';
}
Неизменность точки зрения неизменно порождает иллюзию понимания.
[Удален]
#4
Слава Шевцов:
Тупо сделать 1 запрос с сортировкой по рейтингу и 15 запросов на доп. данные, с кешированием через memcached 🍻

Человек совладать не может как по циклу вывести всё из таблицы, а Вы ему про мемкэшед еще :D Он сейчас огорчится, что вообще взялся изучать веб-программирование :)

[Удален]
#5
Слава Шевцов:
Разбить таблицу на две (с фиксированой шириной столбцов и плавающей). Тупо сделать 1 запрос с сортировкой по рейтингу и 15 запросов на доп. данные, с кешированием через memcached 🍻

%) Гм... Сомнительно кэшировать подобные данные, тем более, что мемкэш не гарантирует сохранность кэша в течение указанного срока хранения, поэтому придётся для каждого элемента проверять его существование и в случае отсутствия перезапрашивать. Если данных очень много, а лимит памяти для мемкеша маленький, то данные будут теряться постоянно. К тому же мемкэш стоит далеко не на всех хостингах. Что может быть проще одного запроса с джойном?


$result=mysql_query('SELECT t1.blog_id,t2.blog_shortname, t2.blog_siteurl FROM evo_blogs as t1 left join evo_blogs1 as t2 on (t2.blog_id = t1.blog_id) ORDER BY t1.blog_user_rate DESC LIMIT 15');
if($result && mysql_num_rows($result)>0)
while($res=mysql_fetch_assoc($result))
print '<a href="http://bloodtar.ru/'.stripslashes($res['blog_siteurl']).'">'.htmlspecialchars(stripslashes($res['blog_shortname'])).'</a><br />';

C
На сайте с 16.04.2009
Offline
7
#6
So1:
Человек совладать не может как по циклу вывести всё из таблицы, а Вы ему про мемкэшед еще :D Он сейчас огорчится, что вообще взялся изучать веб-программирование :)

не огорчусь))

Спасибо всем ответившим)

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