вобщем, резюмирую.
для реальных приложений база данных mysql версии 3.23.x(в моем случае еще и без innodb) подходит очень плохо.
сейчас почти доделал каталог:
неограниченная вложенность
каждая категория имеет набор полностью настраиваемых параметров(несколько типов).
каждая категория может иметь неограниченное число позиций(с параметрами).
плюс еще работа с фотографиями(они могут быть привязаны к категории или позиции, причем каждая картинка может быть в двух вариантах: большая и маленькая).
т.е. почти везде идет отношение «многие ко многим». а в mysql этой версии(впрочем и в 4.x) невозможно создать струкутру, которая будет поддерживать сама себя.
рассмотрим сценарий удаления категории:
удаляется категория.
удаляются все подкатегории(т.е. вся ветка).
удаляются все связи параметров, относящиеся к удаленным категориям).
удаляются параметры, которые не были закреплены ни за одной категорией из оставшихся не удаленных.
удаляются все позиции, которые относились к удаленным категориям.
удаляются все значения параметров, которые были связаны с позициями, которые в свою очередь относились к удаленным категориям.
удаляются все картинки(записи в бд+файлы) относящиеся к удаленным категориям и позициям.
если бы имелась в наличии нормальная СУБД, то многие вещи можно было бы сделать автоматически(каскадное удаление+триггеры).
а теперь прикиньте код на php, и причем если что-то где-то пойдет не так, то транзакции нету
в итоге. mysql слабо подходит для более менее серьезных вещей. мое имхо. больше не возьмусь делать такие вещи на мускуле, пусть заказчик бошку чешет, насчет хостинга
кроме того, объем кода, обслуживающий всю эту систему уже сотни килобайт

не считая административного интерфейса и вывода
p.s. а теперь представьте, что происходит при смене родительской категории

p.p.s. а многие вещи, которые задумывались, мне не удалось реализовать в принципе
========================================================
Кстати вот еще вопрос. Заказчик хочет, чтобы пути выглядели так:
/catalog/phone/nokia/
/catalog/phone/nokia/7800/ - последнее это уже позиция а не категория
/catalog/food/fastfood/mcdonalds/
/catalog/food/fastfood/mcdonalds/gamburger/ - последнее это уже позиция а не категория
Написал pathFinder. алгоритм(только для категорий):
всю цепочку загоняем в массив.
находим последний элемент в цепочке.
по имени последнего элемента, получаем id(их может быть несколько, т.к. может быть вот так:
/catalog/kpk/rover/
/catalog/phone/rover/
далее находим все пути и в цикле сравниваем, как только нахоим нужный путь, выходим.
вопрос:
можно ли сделать что-то с помощью mode_rewrite?
или может выгоднее завести таблицу aliases и там хранить все привязки, т.к. находить id категории и сразу проверять?
к сожалению такой вариант:
category.html?catid=id
не возможен