Столкнулся с следущей задачей...
Есть БД категорий товаров.
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 для другого и все дела
тоже убогий но получше метод - выгрузи эти две строки в массив
бегать по массиву все таки не базу дергать каждый раз
пробежишся по одному деогая 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 - получилось сделать поле и внести в него колличество товаров.
Второй - смотрит если ли 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');
}
}