[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Древовидная структура - выделить последний элемент
mailmoney
Здравствуйте.
Столкнулся с следущей задачей...
Есть БД категорий товаров.
id parent name
1 0 магазин
2 1 игрушки
3 1 инструменты
4 3 сложные
5 3 простые

Как то так - т.е. вложений может быть несколько. Ну соответственно для каждой категории есть свои товары. Вот в некоторых категориях отсутствуют товары - мне нужно написать алгоритм, который удалил такие категории, и не затронул категории родители - т.е. как в примере 3 1 инструменты - может и не содержать товаров, а просто быть родителем для подкатегорий. Подскажите, может есть у кого какие мысли. Я уже голову ломаю, массивы пытаюсь соорудить, но что то не то....
Спасибо



Спустя 2 часа, 8 минут, 6 секунд (1.10.2011 - 21:50) caballero написал(а):
при такой тупой структуре остается только рекурсиями по базе бегать что не есть хорошо

тоже убогий но получше метод - выгрузи эти две строки в массив
бегать по массиву все таки не базу дергать каждый раз

пробежишся по одному деогая In_array для другого и все дела

Спустя 1 час, 49 минут, 25 секунд (1.10.2011 - 23:40) redreem написал(а):
структура не тупая аочень даже удобная. для различных случаев можнодобавить к стурктуре поле state - которое будет показывать нужный вам флаг (к примеру пустая или нет категория). а сама категория пусть висит себе родителем. просто при выборке если state==0, то идем дальше.

Спустя 6 часов, 41 минута, 51 секунда (2.10.2011 - 06:21) mailmoney написал(а):
да такой флаг есть, но данные добавляют в бд из xml файла... там тоже циклы накапливают большие объемы инсертов (до 8000, разделенные конечно), и данные в таких файлах раскиданы и идут не попорядку. Т.е. выставить этот флаг может быть даже сложнее чем сейчас придумать алгоритм вычисления пустых категорий.

Спустя 4 часа, 24 минуты, 1 секунда (2.10.2011 - 10:46) redreem написал(а):
в текущей формулировке слишком много неизвестных. гадать будем до НГ.

Спустя 1 час, 25 минут, 43 секунды (2.10.2011 - 12:11) mailmoney написал(а):
Если кому пригодится - первый цикл загоняет всё в массивы (ну я особо не писал для ценителей оформления красиво).
Второй - смотрит если ли id в массиве parent и удаляет (точнее ставит в неактивность категорию).
Третий - смотрит родительские категории (они тоже могут быть пустыми).

products_count - получилось сделать поле и внести в него колличество товаров.

$result=mysql_query('SELECT categoryID,name,parent,products_count FROM SS_categories where categoryID>24 and products_count=0');

$a=0;
while($row = mysql_fetch_array($result, MYSQL_ASSOC))
{
$cat1[$a]=$row[categoryID];
$cat2[$a]=$row[parent];
$cat3[$a]=$row[name];
$cat4[$a]=$row[products_count];
$a++;
}

for ($x=0;$x<count($cat1);$x++){
if (in_array($cat1[$x], $cat2))
{
}

else
{
$catend[$x]=$cat1[$x];
mysql_query("UPDATE SS_categories SET enabled=0 WHERE categoryID=".$catend[$x])or die ('2');
}
}


for ($x=0;$x<count($cat1);$x++){
if ($cat4[$x]==0) {
$catdel[$x]=$cat1[$x];
mysql_query("UPDATE SS_categories SET enabled=0 WHERE categoryID=".$catdel[$x])or die ('3');
}
}
Быстрый ответ:

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