Julliet
Новичок
Всем привет, обрисую задачу поэтапно.
есть в базе данных таблица "pages" в которой хранятся значения о страницах сайта.
у таблицы поля такие "id" - уникальный идентиф., "title" - заголовок страницы, тайтл; "level" - уровень в иерархии, "parent_id" - id родительской страницы, "url" - url.
Нужно вывести тайтлы и url страниц, начиная с первого уровня и заканчивая третьим.
Т.е, нужно показать иерархию, допустим такую:
ОГОРОД
Овощи
| Капуста
| | Белокочанная
| | Цветная
| | Кольраби
| Картофель
| | | большой
| | | мелкий
| | | средний
Ягоды
| Смородина
| | Чёрная
| | Красная
Да, а еще страницы фрукты-овощи - они в свою очередь имеют родительский док - "Огород"
Итак, мы знаем что есть страница "Огород", и знаем ее ID. Пускай он равняется "3". Уровень у Огорода = 0.
Поехали.
1-м sql-запросом выберем подчиненные страницы для "Огорода" - выбираем ID, title с условием where parent_id=3 и level=1.
Проверяем, что результат запроса не пустой, и запускаем первый цикл, в котором получаем IDшники подчиненных "Огороду" страниц
Так. с $parent , которая содержит IDшки страниц 1-го уровня, нужно запускать еще один запрос в базу,
отбираем страницы, у которых level=2 и parent_id=$parent.
т.е., код начинает выглядеть так:
Тут у нас уже получается массив с данными (для второго уровня, вообще не знаю почему, но, если массив не использовать, то выведет только 1 значение для селекта 2-го уровня).
Т.е., набор IDшек страниц второго уровня - это массив.
Получается, что следующий шаг - это впихнуть в код foreach ($med_id as $index => $mid) для этого массива, и на каждом шаге обхода делать sql запрос с условием where parent_id=$mid. Т.е., вот так:
И вот тут у меня ступор! я два дня ковыряюсь с этим, вроде всё понятно, но как записывать элементы, выбранные из базы на 3-м шаге? в какой массив? как он должен выглядеть вообще - я уже устала и ничего не соображаю...
Затупила на этом и всё.
Вопрос несложный, а вот сделать не получается. Всё какой-то бред... Перечитала кучу статей по массивам, толи я искать не умею, но попадалось совсем не то...
есть в базе данных таблица "pages" в которой хранятся значения о страницах сайта.
у таблицы поля такие "id" - уникальный идентиф., "title" - заголовок страницы, тайтл; "level" - уровень в иерархии, "parent_id" - id родительской страницы, "url" - url.
Нужно вывести тайтлы и url страниц, начиная с первого уровня и заканчивая третьим.
Т.е, нужно показать иерархию, допустим такую:
ОГОРОД
Овощи
| Капуста
| | Белокочанная
| | Цветная
| | Кольраби
| Картофель
| | | большой
| | | мелкий
| | | средний
Ягоды
| Смородина
| | Чёрная
| | Красная
Да, а еще страницы фрукты-овощи - они в свою очередь имеют родительский док - "Огород"
Итак, мы знаем что есть страница "Огород", и знаем ее ID. Пускай он равняется "3". Уровень у Огорода = 0.
Поехали.
1-м sql-запросом выберем подчиненные страницы для "Огорода" - выбираем ID, title с условием where parent_id=3 и level=1.
Проверяем, что результат запроса не пустой, и запускаем первый цикл, в котором получаем IDшники подчиненных "Огороду" страниц
PHP:
while($row = $result->fetchRow(DB_FETCHMODE_ASSOC)) {
$parent=$row['pages_id'];
}
отбираем страницы, у которых level=2 и parent_id=$parent.
т.е., код начинает выглядеть так:
PHP:
while($row = $result->fetchRow(DB_FETCHMODE_ASSOC)) {
$parent=$row['pages_id'];
$med = $dbc->query("SELECT pages_title, pages_id, pages_visible FROM ".db_name."_".db_lang."_pages WHERE pages_level=2 AND pages_parent_id=".$parent." ORDER BY pages_number");
$med_title=array();
$med_id=array();
while ($row2 = $med->fetchRow(DB_FETCHMODE_ASSOC))
{
if ($row2['pages_visible']==0){
$med_title[$row2['pages_id']]=$row2['pages_title'];
}///тут еще проверяю видимость (которую определил пользователь, но это мелочи)
else $med_title[$row2['pages_id']]='';
} //////конец выборки для 2-го уровня
Т.е., набор IDшек страниц второго уровня - это массив.
Получается, что следующий шаг - это впихнуть в код foreach ($med_id as $index => $mid) для этого массива, и на каждом шаге обхода делать sql запрос с условием where parent_id=$mid. Т.е., вот так:
PHP:
while($row = $result->fetchRow(DB_FETCHMODE_ASSOC)) {
$parent=$row['pages_id'];
$med = $dbc->query("SELECT pages_title, pages_id, pages_visible FROM ".db_name."_".db_lang."_pages WHERE pages_level=2 AND pages_parent_id=".$parent." ORDER BY pages_number");
$med_title=array();
$med_id=array();
while ($row2 = $med->fetchRow(DB_FETCHMODE_ASSOC))
{
$med_id[] = $row2['pages_id'];
foreach($med_id as $index => $mid)
{
//// вот в этом месте должен быть 3-й запрос в базу, с where parent_id=$mid
////// а потом еще формироваться последний массивчик с названием end, и данными о страницах 3 уровня
}
if ($row2['pages_visible']==0){
$med_title[$row2['pages_id']]=$row2['pages_title'];
}
else $med_title[$row2['pages_id']]='';
} //////конец выборки для 2-го уровня
Затупила на этом и всё.
Вопрос несложный, а вот сделать не получается. Всё какой-то бред... Перечитала кучу статей по массивам, толи я искать не умею, но попадалось совсем не то...