php and Postgre

3 отговора 87 прегледа
#1

php and Postgre

nqkoj moje li da pomogne za slednoto:
imam slednata tablica v PostgreSQL
CREATE TABLE scheme.category
(
id serial NOT NULL,
name varchar(255) NOT NULL,
id_parent int4 NOT NULL,
CONSTRAINT productscategories_pkey PRIMARY KEY (id)
)

koqto predstawq kategorii kato durwowidna struktura.
iskam da izwleka zapisite roditel->naslednik->naslednik ->t.n
koito da sa podredeni primerno taka
- cat1
- cat1.1
-cat1.1.1
- cat1.2
-cat2
- cat2.1
- cat2.2
-cat2.2.1
- i t.n

nqkakwa funciqa eventualno da se napishe v posgreto ili nqkakuv drug na4in
kato uslowiteo e 4e dyrwoto moje da e s bezkrajna dulbo4ina.
ako nqkoj ima ideq neka da napishe koda kakto misli 4e 6te e.
10x

Отговор
в отговор на noname #2

Re: php and Postgre

ами най-лесното в


function draw_level($parent) {

$query = 'SELECT * FROM scheme.category WHERE id_parent = \''.pg_escape_string($parent).'\'';

$num_rows = pg_num_rows($res);
for ($cnt = 0; $cnt < $num_rows; ++$cnt) {
$row = pg_fetch_array($res, $cnt, PGSQL_ASSOC);
echo $row['name'], "\n";
draw_level($row['id']);
}
pg_free_result($res);

}

draw_level(0);


ще е добре да си направиш индекс по id_parent (а и ако искаш супер стриктност и foreign key) и главната директория я приемам за 0

тва го написах за 2-3 минути, така че може да не е много проверено, ама идеата е такава

а и не винаги това е достатъчно бързо решение, но може да си намериш статии сега не се сещам къде (освен гугъл), където се обсъждат дърветата и тяхното представяне в БД

Отговор
в отговор на noname #3

по-добрият вариант

(винаги мисля по-късно ;-))

значи ако може да променяш нещата т.е. сега пишеш структурата на таблиците

разгледай contrib директорията на postgresql - модула ltree ..... много по-добро решение за дървета в общия случай

Отговор
в отговор на phpGuru #4

Re: по-добрият вариант

та за ltree-то ето и тук може да погледнеш

[линк]

Отговор