Xwab
Форумыnavigate_nextПрограммирование на PHP

Запросы В БД [В цикле]
Сообщения
Istsam


$sql = mysql_query("SELECT * FROM `cat` WHERE `id_cat`='0'");
while($m=mysql_fetch_assoc($sql)){
echo'<a href="'.URL.'/cat.php?id='.$m['id'].'">'.$m['name'].'</a> ('.mysql_result(mysql_query("SELECT COUNT(*) FROM `files` WHERE `id_cat`='".$m['id']."'"), 0).')';
}

GEN: 0.0195cek.
GEN: 0.0179cek.
GEN: 0.0175cek.
GEN: 0.0169cek.
GEN: 0.017cek.

В общем генерация крутится возле 0.017
Так вот, если убрать этот код:

    ('.mysql_result(mysql_query("SELECT COUNT(*) FROM `files` WHERE `id_cat`='".num($m['id'])."'"), 0).')


То ->
GEN: 0.0059cek.
GEN: 0.0064cek.
GEN: 0.0062cek.

Так вот, возможно как то и посчитать, и сохранить генерацию?
Может быть обьединить этот запрос:


$sql = mysql_query("SELECT * FROM `cat` WHERE `id_cat`='0'");
while($m=mysql_fetch_assoc($sql)){

}

Или как лучше действовать в такой ситуации, чтобы вывести категории, и посчитать кол-во файлов в них

27 Апр 2011, 12:02
mazaHELL

я бы, заюзал кеш, например на 30 минут, после 30 минут кеш перезаписывается)

посчитал, сформировал, записал результат, и потом хоть 1000 раз запрашивай цикл

27 Апр 2011, 12:15
Istsam

mazaHELL, для скрипта[Портфолио] кеширование не уместно
P.S.Посоветуй кешер

27 Апр 2011, 12:37
mazaHELL

Istsam, если неуместно тогда насилуй БД)
я использую только memcache чего и всем советую
добавлено спустя 1 минуту:
Istsam, если хочешь можно вместо кешера заюзать сериализацию данных. Сформировал массив, сериализнул. запихнул, либо в файл либо в бд, и тогда по нужде ансериалайзишь и выводишь как душе угодно

27 Апр 2011, 12:43
Istsam

mazaHELL, про последний пункт по подробней немного)

27 Апр 2011, 12:46
Ant0ha

Генерация нормальная, запросы тоже, кэш, по сути, не нужен (если, конечно там не будет нескольких сотен категорий). Единственное что не хорошо - это смесь бизнес логики, данных и отображения. Отдели хотя бы вид от всего остального.

27 Апр 2011, 12:51
mazaHELL

$sql = mysql_query("SELECT * FROM `cat` WHERE `id_cat`='0'");
$result = array();
while( $m = mysql_fetch_assoc($sql))
{
   $result[] = array($m['name'],mysql_result(mysql_query("SELECT COUNT(*) FROM `files` WHERE `id_cat`='".$m['id']."'"), 0));
}

//пихаешь в БД
// unsert into `value`='".serialize($result)."' ////


// запрашиваешь из бд
$result = unserialize($res['value']);

// делаешь что угодно с массивом через foreach()
добавлено спустя 1 минуту:
Ant0ha, ты прикинь зашли к тебе на страницу много юзеров/ботов/поисковиков и давай насиловать твою БД )))

27 Апр 2011, 12:56
Ant0ha

А вообще лучше сделать модель, в ней метод

public function getCategories()
{
    $result = (запрос на получение категорий);
    $categories = array();
    while($category = mysql_fetch_array($result)) {
        $category['count_items'] = (запрос на получение количества работ);
        $categories[] = $category;
    }

    return $categories;
}

В таком случае ты запросто можешь кэшировать результат.

mazaHELL, тоже самое можно сказать про каждый скрипт.


__________
посл.ред. 27 Апр 2011, 12:59; всего 1 раз 27 Апр 2011, 12:58
Istsam

Ant0ha, бизнес логика? O_o
Растолкуй

27 Апр 2011, 12:58
mazaHELL

Ant0ha, не в каждом скрипте запрос + запрос в цикле... для кого то это норма..но не для меня

27 Апр 2011, 12:59
Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.