[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Сосчитать статьи в библиотеке
dsa
Решил перевести свою библиотеку на неограниченную вложенность разделов и теперь не приложу ума как сосчитать кол-во статей в разделах.
Конструкция библиотеки получилась такая

$query = mysql_query("SELECT `name` FROM `file` WHERE `id2` = '". $id ."'");
while($file = mysql_fetch_assoc($query)){
echo $file['name'];
}

где:
$id - идентификатор текушего раздела
id2 - все папки или статьи хранящиеся в этом разделе
И вот как тут сосчитать все статьи если кол-во связок $id >> id2 может быть неограниченно?
Думал пройти всю цепочку циклом, но не думаю что это будет верным решением т.к запросов получится уйма



Спустя 4 минуты, 22 секунды (22.12.2010 - 00:26) divine266 написал(а):
я так понял тебе надо узнать сколько записей втаблице file?

Спустя 4 минуты, 23 секунды (22.12.2010 - 00:31) divine266 написал(а):
если да..то вот так

$query = mysql_query("SELECT `name` FROM `file` WHERE `id2` = '". $id ."'");
$num = mysql_num_rows($query); //Кол-во записей в таблице file
while($file = mysql_fetch_assoc($query)){
echo $file['name'];
}

Спустя 13 минут, 14 секунд (22.12.2010 - 00:44) dsa написал(а):
нет мне не нужно сколько их там всего открылось
мне нужно чтоб было так
всего у нас 3 раздела каждый из которых вложен друг в друга и имеет по 5 статей
1 раздел(15 статей) -> открываем его попадеем в 2 раздел
2 раздел(10 статей) -> открываем его попадеем в 3 раздел
3 раздел(5 статей) и т. д
Вроде понятно описал biggrin.gif

Спустя 5 минут, 47 секунд (22.12.2010 - 00:50) divine266 написал(а):
смысл какой то цикл, если у тебя все статьи хранятся в 1 таблице, тебе нужно узнать сколько всего mysql_num_rows($qury); и тызнаешь сколько у тебя статей...или у тебя они не в 1 таблице?

Спустя 8 минут, 9 секунд (22.12.2010 - 00:58) divine266 написал(а):
ааа..дошло или опять не так...ты заходишь в один раздел узнал сколько открылось..зашел в другой узнал сколько открылось + то что в прошлом разделе так?

Спустя 3 минуты, 47 секунд (22.12.2010 - 01:02) ИНСИ написал(а):
dsa смотри в сторону
while(true) {

}


Спустя 2 минуты, 33 секунды (22.12.2010 - 01:04) divine266 написал(а):
biggrin.gif +1

Спустя 3 минуты, 51 секунда (22.12.2010 - 01:08) divine266 написал(а):
если тебе надознать сколько ты открыл всего статей по категориям ток к чему можно в сессии рез класть..попробуй так
session_start();
$query = mysql_query("SELECT `name` FROM `file` WHERE `id2` = '". $id ."'");
if(!$_SESSION['num']){
$_SESSION['num'] = mysql_num_rows($query); //Кол-во записей в таблице file по данной категории
}else{
$_SESSION['num'] += mysql_num_rows($query); //Кол-во записей в таблице file по данной категории + предыдущие
}
while($file = mysql_fetch_assoc($query)){
echo $file['name'];
}

Спустя 7 минут, 14 секунд (22.12.2010 - 01:15) dsa написал(а):
divine266, я понимаю что ты очень старался, но не надо мне всолько было статей в предыдущих разделах, а мне надо сколько будет в последующих

Спустя 8 минут, 21 секунда (22.12.2010 - 01:24) divine266 написал(а):
ну а написать? сделай еще один запрос в базу увелича id и посчитай сколько строк пришло...и узнаешь сколько в след разделе...

Спустя 9 минут, 21 секунда (22.12.2010 - 01:33) dsa написал(а):
divine266, ха-ха у меня даж мозгов не хватает как можно сделать
Че придумал то вот, но эт вообще фигня :lol:
Чет типа такого

$dirid = $id;
while($dirid != '0' && $dirid != ""){
$req = mysql_fetch_array(mysql_query("SELECT * FROM `file` WHERE `id2` = '". $dirid ."' AND `tip` = 'razdel' LIMIT 1"));//а если тут 2 раздела, то статьи из 2 не посчитаются
$dirid = $req['id'];
}

Спустя 2 минуты, 40 секунд (22.12.2010 - 01:36) divine266 написал(а):
помойму ты совсем другое справшивал ph34r.gif

Спустя 6 минут, 18 секунд (22.12.2010 - 01:42) dsa написал(а):
divine266, да не я все о том же biggrin.gif
Вроде нашёл интерестный спосб сейчас опишу

Спустя 7 минут, 30 секунд (22.12.2010 - 01:49) divine266 написал(а):
давай))) wink.gif

Спустя 11 минут, 24 секунды (22.12.2010 - 02:01) dsa написал(а):
Вот, выдрал из одного движка
При создании нового раздела добавляем инфу о его вложенности в другие разделы
Напр создаем 1 каталог с `id` = 1 и добавляем туда новое поле `adres`="razdel1"
В 1 каталоге создаем ещё один с `id` = 2 и пишем `adres`="razdel1|razdel2" и тд
Далее узнаем для каждого раздела его `adres` и подсчитываем
Напр запрос для первого (корневого каталога)

$id = 1;
$query = mysql_query("SELECT `adres` FROM `file` WHERE `id2` = '". $id ."'");
while($file = mysql_fetch_assoc($query)){
$adr = 'razdel'. $id .'|'. $file['adres'] .'';
$count = mysql_query("SELECT COUNT(*) FROM `file` WHERE `adres` LIKE '" . $adr . "%'");
echo"Здесь $count статей";
}
//минус - каждая статья также должна иметь свой `adres` и если он вдруг каким-то образом затеряется, то статья не будет посчитанна никогда
//Плюс - никаких циклов и все одним запросом


Спустя 1 минута, 21 секунда (22.12.2010 - 02:02) dsa написал(а):
Вроде хорошее решение smile.gif

Спустя 24 минуты, 3 секунды (22.12.2010 - 02:26) inpost написал(а):
dsa
А почему ты решил, что $count вернёт количество статей?

Спустя 7 минут, 38 секунд (22.12.2010 - 02:34) dsa написал(а):
inpost а почему нет?

Спустя 6 минут, 16 секунд (22.12.2010 - 02:40) inpost написал(а):
dsa
Потому что он вернёт ссылку на ресурс. Проверь сам.

Спустя 13 минут, 12 секунд (22.12.2010 - 02:53) dsa написал(а):
inpost
Ага, я не тестил на самом деле но посути работать должно т-к на оф сайте у них все норм считает.
Ток я выдрал еще не совсем верно :D

$count = mysql_result(mysql_query("SELECT COUNT(*) FROM `file` WHERE `adres` LIKE '" . $adr . "%'"), 0);

Спустя 7 минут, 14 секунд (22.12.2010 - 03:00) inpost написал(а):
dsa
mysql_result - возвращает результат от ссылки на ресурс! Ты вернул тогда лишь ссылку на ресурс, поэтому твой тот код не работал бы.
Вот теперь уже правильно, так будет работать.

Спустя 9 часов, 14 минут, 40 секунд (22.12.2010 - 12:15) dsa написал(а):
А может быть кол-во статей ещё как-нибудь и прокешировать?
Подскажите, пожалуйста будет ли от этого толк если строк в таблице около 20000 (просто там не только статьи, а еще и файлики, загрузки и все как бы в кучке biggrin.gif )
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.