Как сравнить два поля одной таблицы?

Есть таблица, в которой записаны пункты меню, в ней лежат и главные, и дочерние. У дочерних столбец 'parent_id' ссылается на 'id' главного пункта. Мне надо вывести следующее:
foreach($menu_query as $item){
	if($item['parent_id'] == ''){
		echo '<li><a href="">'.$item['name'].'</a></li>'; //Выводим пункт, если у него нет дочерних
	}else{
		echo '<li>';
			echo '<a href="">'.$item['name'].'</a>'; //Родительский пункт
			echo '<ul class="submenu">';
				echo '<li><a href="">'.$item['name'].'</a></li>'; //Дочерний пункт
			echo '</ul>';
		echo '<li>';
	}
}

Не знаю, насколько я правильно представляю этот вывод, возможно кто-то сталкивался, буду благодарен.
  • Вопрос задан
  • 145 просмотров
Пригласить эксперта
Ответы на вопрос 2
@linuxnb
Как вариант это на js делать. Есть в инете примеры которые сами тебе подсунут дочерей под родителей. Либо делать проверку нп

Если нет дочернего , то найти всех у кого parent_id = id.
Тут либо еще 1 запрос на каждом этапе в Mysql
Либо выгрузить в 2 массива. Где РодительИд пустой и где он с id родителя
И просто делать поиск по массиву.
Ответ написан
KM-Brothers
@KM-Brothers
Я знаю, что ничего не знаю...
Мне самому не все нравится в написанной мною функции, но проблему она решает:
Рекурсивная функция (beta_0.1)
<?php 

$catalog = [
    [
        'id' => 1,
        'p_id' => '',
        'name' => 'Parrent Name'
    ],
    [
        'id' => 2,
        'p_id' => '',
        'name' => 'Parrent Name'
    ],
    [
        'id' => 3,
        'p_id' => '',
        'name' => 'Parrent Name'
    ],
    [
        'id' => 4,
        'p_id' => '1',
        'name' => 'Parrent Name'
    ],
    [
        'id' => 5,
        'p_id' => '2',
        'name' => 'Parrent Name'
    ],
    [
        'id' => 6,
        'p_id' => '3',
        'name' => 'Parrent Name'
    ],
    [
        'id' => 7,
        'p_id' => '4',
        'name' => 'Parrent Name'
    ],
    [
        'id' => 8,
        'p_id' => '5',
        'name' => 'Parrent Name'
    ],
    [
        'id' => 9,
        'p_id' => '5',
        'name' => 'Parrent Name'
    ],
    [
        'id' => 10,
        'p_id' => '9',
        'name' => 'Parrent Name'
    ],
];

function recursive($data, $p_id = 0, $level = 0)
{
    
    echo "<ul>";
    foreach ($data as $category) {
        echo "<li>";
        if ($category['p_id'] == $p_id) {

            $str = '';
            if ($level > 0) {
                for ($i=0; $i < $level; $i++) { 
                    $str .= '-';
                }
            }

            if ($category['p_id'] == $p_id) {
                echo $category['name'] . "<br>\n";
            }

            $id = $category['id'];
            $level = $level + 1;

            recursive($data, $id, $level);

        }
        echo "</li>";

    }
    echo "</ul>";
}

Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы