Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Wyświetl drzewo menu wybranego rodzica

Widzę jeden problem z twoim rozwiązaniem. Podczas sprawdzania identyfikatora if($id == $record->id) dopasujesz tylko aktualny poziom w drzewie. np. wybranie Dell z id=2 nie będzie pasować do pierwszej iteracji, więc funkcja nie przejdzie do następnego poziomu.

Musisz śledzić ścieżkę do wybranego menu.

W Twoim przypadku. Po wybraniu Dell zobaczysz tylko „Komputer”, czy mam rację?

Co powiesz na coś takiego:

...
  function rederTreeById($records, $path) {
        echo '<ul>';
        foreach($records as $record) {
                if(in_array($record->id, $path)) {
                        echo '<li>'.$record->title;
                        if(!empty($record->childs)) {
                                rederTreeById($record->childs, $path);
                        }
                        echo '</li>';
                } else {
                        echo '<li>'.$record->title.'</li>';
                }
        }
        echo '</ul>';
 }

 function getPath($id) {
    $path = array();
    $current=$id;
    $path[] = 1
    while(!is_null($categories[$current]->parent_id)) {
        $current=$categories[$current]->parent_id
        $path[] = $current;
    }
    return $path;
 }


$selectedId = 1;


 rederTreeById($rootCategories, getPath($selectedId));
...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zsynchronizuj wszystkie role użytkowników między dwiema instalacjami Wordpress współużytkującymi te same tabele wp_users i wp_usermeta.

  2. Jak radzić sobie z błędami dla zduplikowanych wpisów?

  3. Znaleźć najbliższe dopasowanie do błędnie napisanych nazw miast?

  4. Jak uzyskać najnowsze 2 pozycje w kategorii w jednym wyborze (z mysql)

  5. ZMIEŃ znak nowej linii w MYSql nie działa