regi
Новичок
Путь хранится в бд, как сделать выборку
Есть две таблицы.
Одна: cat(cid,cleft,cright,clevel) - на алг нестед сетс
Вторая:cat_info(cid,ctitle,cpath) - cpath хранит название раздела, которое используется, ессно, в чпу: типа /razdel/razdel2/razdel3.
Допустим, таблица cat_info забита таким образом:
ctitle, cpath, cat.clevel
Вентиляция ventilation 1
Статьи articles (вентиляция - родитель) 2
Оборудование equipment (вентиляция - родитель) 2
Пылеудаление dust 1
Статьи articles (Пылеудаление - родитель) 2
Оборудование equipment(Пылеудаление - родитель) 2
я думаю вопрос уже должен быть понятен. Как при хранении в базе НЕ полного пути, делать выборку нужного раздела в случае наличия на одном уровне разделов с одинаковым cpath?
Раньше хранил в бд полный путь, типа /ventilation/articles. На форуме, не помню точно темы, посоветовали хранить лишь синоним названия для чпу в бд. Я и не подумал о проблемах в случае одинаковых cpath на одном уровне при разных родителях. Выбирал запросом where cat_info.cpath=$cpath and cat.clevel=$clevel, пока не добавил для другого подраздела разделы с таким же cpath ^)
-~{}~ 05.04.06 21:56:
Я в принципе понимаю, как сделать:
1. Делаем запрос where cat_info.cpath=articles and cat.clevel=4
2. Если mysql_num_rows($result) > 1 то из исходного массива(который получается из строки запроса) берем родительский элемент(если была строка /catalog/other/ventilation/articles/, то берем ventilation аррай попом) и опять делаем такой же запрос - cat_info.cpath=$cpath and cat.clevel=$clevel. если опять num_rows > 1 повторяем, ну, получается рекурсия
Но ведь получается легче хранить полный путь в бд и выбирать сразу и без проблем(Только админка усложнится, так как переименование пути родительской категории будет применяться ко всем детям). может отказаться от этой затеи и вернуться к хранению полного пути
Есть две таблицы.
Одна: cat(cid,cleft,cright,clevel) - на алг нестед сетс
Вторая:cat_info(cid,ctitle,cpath) - cpath хранит название раздела, которое используется, ессно, в чпу: типа /razdel/razdel2/razdel3.
Допустим, таблица cat_info забита таким образом:
ctitle, cpath, cat.clevel
Вентиляция ventilation 1
Статьи articles (вентиляция - родитель) 2
Оборудование equipment (вентиляция - родитель) 2
Пылеудаление dust 1
Статьи articles (Пылеудаление - родитель) 2
Оборудование equipment(Пылеудаление - родитель) 2
я думаю вопрос уже должен быть понятен. Как при хранении в базе НЕ полного пути, делать выборку нужного раздела в случае наличия на одном уровне разделов с одинаковым cpath?
Раньше хранил в бд полный путь, типа /ventilation/articles. На форуме, не помню точно темы, посоветовали хранить лишь синоним названия для чпу в бд. Я и не подумал о проблемах в случае одинаковых cpath на одном уровне при разных родителях. Выбирал запросом where cat_info.cpath=$cpath and cat.clevel=$clevel, пока не добавил для другого подраздела разделы с таким же cpath ^)
-~{}~ 05.04.06 21:56:
Я в принципе понимаю, как сделать:
1. Делаем запрос where cat_info.cpath=articles and cat.clevel=4
2. Если mysql_num_rows($result) > 1 то из исходного массива(который получается из строки запроса) берем родительский элемент(если была строка /catalog/other/ventilation/articles/, то берем ventilation аррай попом) и опять делаем такой же запрос - cat_info.cpath=$cpath and cat.clevel=$clevel. если опять num_rows > 1 повторяем, ну, получается рекурсия

Но ведь получается легче хранить полный путь в бд и выбирать сразу и без проблем(Только админка усложнится, так как переименование пути родительской категории будет применяться ко всем детям). может отказаться от этой затеи и вернуться к хранению полного пути
