Рекурсивная выборка с бд
1.
Виталий (22.07.2012 / 23:46)
Честно говоря не хочется "***кодить" и поетому прошу помощи у более опытных php программистов.
Есть таблица i_sec структура(id, name, uid)
Также есть таблица i_page(id,uid,title,name)
Вообще i_sec как-бы папки(uid=0 это главные а дальше нужно рекурсивно до потери пульса выводить папки с uid прикрепленным к пред. папке )
Также к ним выводить страницы с i_page ( uid страницы не может быть 0 соответственно прикрепляется хоть к какой то папке.
Эх буду рад если кто нибудь поймет, а если поможет то вообще день удался
2.
Михаил (23.07.2012 / 00:18)
типа дерево сообщений вывести?
3.
Виталий (23.07.2012 / 00:47)
2. дерево розделов, подрозделов, к ним всем страницы
4.
iNeeXT (23.07.2012 / 01:13)
По-моему то что нужно
http://www.askdev.ru/question/3553/Про-иерархический-вывод-данных/
5.
Виталий (23.07.2012 / 01:30)
4. ммм ето с директориями, я слово "папка" образно использовал... у меня та же задача но с БД
6.
Кевин Митник (23.07.2012 / 01:59)
в таблицах связи организованы вторичными индексами? если да, то просто рекурсивная функция выборки
7.
iNeeXT (23.07.2012 / 02:40)
5.
id1, дык там с базой
8.
Виталий (23.07.2012 / 03:06)
6. наверное нет - поскольку я их создавал и не знаю что ето)))
7. ммм там столько кода, проще самому подумать...)
9.
Петр (23.07.2012 / 10:46)
Если нужно построить дерево всех разделов, то наверняка проще будет разом извлечь все данные и разбирать с помощью php.
10.
Кевин Митник (23.07.2012 / 13:02)
ресурсоемко, при большем количестве данных.
11.
Виталий (23.07.2012 / 13:15)
9. какраз етот способ пришол утром))..
буду работать...
12.
Петр (23.07.2012 / 13:34)
10.
Кевин Митник_HHTeam, зато быстрее.
13.
Виталий (23.07.2012 / 15:35)
public function loadSections ($uid = 0, $step = 0)
{
$uid = (int)abs($uid);
$q = "SELECT * FROM i_sec WHERE uid='".$uid."'";
echo str_repeat('-',$step);
foreach ($this->db->query($q) as $sec ){
$count = $this->db->query("SELECT COUNT(*) FROM i_sec WHERE uid='".$uid."'")->fetch();
echo $sec['name'].'<br/>';
if ($count[0]){
$this->loadSections($sec['id'],$step+1);
} else {
$this->loadSections($sec['id'],$step-1);
}
}
}
родил что то такое - но на каком то вхождению начинает некоректо работать, м.б есть у кого желание моз потренировать?)
14.
Виталий (23.07.2012 / 15:58)
все хорошо - просто не те параметры передавал в запрос
public function loadSections ($uid = 0, $step = 0)
{
$uid = (int)abs($uid);
$q = "SELECT * FROM i_sec WHERE uid='".$uid."'";
foreach ($this->db->query($q) as $sec ){
$count = $this->db->query("SELECT COUNT(*) FROM i_sec WHERE uid='".$sec['id']."'")->fetch();
echo str_repeat('-',$step);
echo $sec['name'].'<br/>';
if ($count[0]){
$this->loadSections($sec['id'],$step+1);
} else {
$this->loadSections($sec['id'],$step-1);
}
}
}
будут предложения по усовершенствованию кода?
Добавлено через 03:28 сек.
нужно ли кешовать если будет ~30записей?
URL:
https://visavi.net/topics/33419