Сортировать запрос с родителями и детьми (по категориям) в PHP - PullRequest
1 голос
/ 13 сентября 2011

У меня есть БД SQLite с таблицей под названием «библиотека», содержащей 3 поля (12php sMb)

Id (уникальный идентификатор) // имя_библиотеки, содержащее строку // parentLibId, содержащий идентификатор родительской библиотеки.

Если библиотека находится в «корне», parentLibId имеет значение Null (пусто)

Мне нужен массив, который будет возвращать дерево с родителями и потомком, начиная с корня.

Кто-нибудь знает, как это сделать без слишком большого количества кода?

$dbh = new PDO('sqlite:my.sqlite') or die("Error 0xDB0001");
$sth = $dbh->prepare("SELECT * FROM library");
$sth->execute();
$result = $sth->fetchAll();

У меня есть ограничение на время обработки страницы, данное моим другом как небольшое соревнование, и в этой части я не могу понять, я использовал код, но он такой длинный, я чувствую себя глупо XD

Любая помощь приветствуется, если мне неясно, просто скажите это, и я дам более подробную информацию.

Большое спасибо за вашу помощь!

Всем хорошего вечера!

1 Ответ

1 голос
/ 13 сентября 2011

эта функция не проверена. Это главная идея.

getTree();

function getTree($child = null)
{
    $dbh = new PDO('sqlite:my.sqlite') or die("Error 0xDB0001");

    //It's just example. Security and best practice is your problem :p
    if ($child)
        $where = 'parentLibId = ' . $child;
    else
        $where = 'parentLibId IS NULL ';

    $sth = $dbh->prepare("SELECT * FROM library" . $where);
    $sth->execute();

    if ($child)
    {
        $result = $sth->fetchAll()
        $return = $result;
    }else{ //get parents
        while ($result = $sth->fetch())
        {
            //one by one
            $return[] = array(  'parent' => $result, //parent info
                                'childs' => getTree($result['id']) //childs
                            );
        }
    }

    return $return;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...