Структура Загруз центра

Печать RSS
506

Ж
Автор
Пацак
0
Настало время делать загруз и тут появилось желание сделать папки неограниченной вложенности.
Первый вариант сделал с использованием рефИД т.е.
Первый раздел имеет ид 1.
Подраздел имеет рефИд = ид первого радела.
И собственно выборка SELECT * FROM `files` WHERE `refid` = равно ид'у предыдущего раздела.
И так получается сетка. Всё бы хорошо, но как теперь сделать полноценный подсчёт папок и файлов? Только цикл?
W

Землянин
0
Да, + кэширование результатов.
Ж
Автор
Пацак
0
Второй вариант сделал с использованием поиска по доп полю.
Таблица имеет вид имеет вид:
id | local | name
1 | files | java
2 | files/java | hit
3 | files/java/hit | top100
и т.д.
И так тоже получается сетка и подсчёт работает коректно. Всё кул, но теперь у меня на сайте 80 000 файлов и папок и если приминяю функцию подсчёта, то страницы заметно тормозят сек по 5.
запрос на листинг
<?php
$fol = isset($_GET['f']) ? intval($_GET['f']) : 'not';
if ($fol != 'not') {
$sql = mysql_query("SELECT `local`, `name` FROM `down` WHERE `id` = '".$fol."'");
list($loc, $nam) = mysql_fetch_array($sql);
$loc = $loc.'/'.$nam; 
} else { $loc = 'files'; }
$sql = mysql_query("SELECT `id`, `type`, `rus_name` FROM `down` WHERE `local` = '".$loc."'");
...
подсчтёт
$num_folder=mysql_result(
mysql_query("SELECT COUNT(`id`)
FROM `down`
WHERE `type`='folder'
AND `local`
LIKE '".($local.'/'.$name)."%'"),0);
Изменил: Жека (17.04.2010 / 21:41)
Ж
Автор
Пацак
0
кто чё раскажит? Что за кэширование?

Господин ПЖ
0
не понял что ты там затеял но самый лучший вариант я считаю как к примеру сделано у нас на форуме, там по идее также возможно неограниченное кол подфорумов
id / parent / name
1 / 0 / название 1
2 / 0 / название 2
3 / 1 / подкатегория от id 1
4 / 3 / под-подкатегория от id 3
тогда и считать проще, ну а кешировать все равно желательно
к примеру в файл
Д

Пришелец
0
в зц без кеширование никак не обойтись иначе он убёт сервер, нагрузка при большом количестве файлов будет бешеной а время генерации будет зашкаливать
N

Эцилопп сией тентуры
0
5. Vantuz, есть одно "но" в этом способе!
Неприятная процедура выходит при выводе полного "дерева" каталогов!
Например идет так!
Категория1/Категория2/Категория3/Категория4/Категория5/...
Как узнать все эти ветви, если записывается только одно значение в "parent" а делать это надо в цикле!
В итоге выйдет n-е колличество запросов к БД!
Т.е первый цикл
$query1 = mysql...(SELECT... WHERE `parent` = '".$id."');
потом
$query2 = mysql...(SELECT... WHERE `parent` = '".$query1['parent']."');
$query3 = mysql...(SELECT... WHERE `parent` = '".$query2['parent']."');
и т.д
F

Чатланин
0
1. Придумываем велосипед?) рефид для только вывода.
подсчет: индекс на поле путь к файлу и подсчет по этому пути по like + кеширование. А подсчет через цикл при большом кол-ве файлов отправит твой сервак в *** и к чертям на долгое время))
F

Чатланин
0
)))слово "дayн" в антимате)) весело

ツ ツ ツ
0
Я у себя на форуме посты так считаю, сначала получаю список под каталогов
<?
    function list_id_podcat($id)
    {
        $list = $id;
        $sql = $this->list_cat($id);
        while (false != ($res = $this->db->assoc($sql))) {
            // рекурсия
            $list .= ',' . $this->list_id_podcat($res['id']);
        }
        return $list;
    }
Ну и потом счетчик
<?
    function count_post_cat($id, $time = '')
    {
        if ($time != '') $time = 'time > ' . (time() - $time) . ' AND';
        $sql = $this->db->query("SELECT COUNT(*) FROM  " . $this->prif . "forum_post WHERE  $time id_r IN($id)");
        return $this->db->result($sql);
    }
Изменил: Lugaro (18.04.2010 / 02:23)
Стикеры / Теги / Правила / Топ тем / Топ постов / Поиск