Newsgroup: it.comp.www.php
Titolo: secondo voi è corretta questa func

function ns_insert_node($parent, $nome)
{
 $parent = (int)$parent;
 // Etichetta "dx" del padre
 $sql = "SELECT dx FROM personale WHERE id={$parent}";
 $res = mysql_query($sql);
 $line = mysql_fetch_assoc($res);
 // L'etichetta "dx" del padre diventa l'etichetta "sx" del nuovo nodo
 $new_sx = $line['dx'];
 $new_dx = $new_sx + 1;
 // Volendo inserire un nodo, devo "spostare" di 2 tutte le etichette con 
valore superiore
 $sql = "UPDATE personale1 SET sx=sx+2 WHERE sx >= {$new_sx}";
 $res = mysql_query($sql);
 $sql = "UPDATE personale1 SET dx=dx+2 WHERE dx >= {$new_sx}";
 $res = mysql_query($sql);
 // Inserisco il nodo
 $sql = "INSERT INTO personale (nome, sx, dx) VALUES('{$nome}', {$new_sx}, 
{$new_dx})";
 $res = mysql_query($sql);
 // true/false
 return $res;
}
presa da un noto sito sul php, sto cercandodi capire se funziona ma sembra 
di no

 di no
mah..
senza testare e' azzardato dire se funziona oppure no..
ti posso dire che non sembra non funzionare..
comunque controlla i nomi tabella (ne usi due diversi e non vorrei che
l'errore fosse proprio quello)..
e comunque manca l'aggiornamento del nuovo valore parent alla fine della
funzione..
se parent e' un auto_increment allora dovrebbe bastare un..
"UPDATE personale SET parent = $parent WHERE parent =" . mysql_insert_id()..
-- 
www.iuz-lab.info

 
[errata]
"UPDATE personale SET parent = $parent WHERE id = " . mysql_insert_id()..
[/errata]
-- 
www.iuz-lab.info

"iuz" <us...@host.network> ha scritto nel messaggio 
news:i5Cne.972487$b5.42...@news3.tin.it...

errata come codice o come logica ? come codice l'avevo capito al volo , ma 
come logica ?
sto confrontando anche con altri codici invece sembra corretta, non ce 
capisco na mazza.
[sconforto] uff [/sconforto]

 come logica ?
[..]
errata era la riga sql che avevo scritto in coda al tuo primo post..
come logica sembrerebbe corretta, di preciso cosa e' che non sembra
funzionare?
-- 
www.iuz-lab.info

"iuz" <us...@host.network> ha scritto nel messaggio 
news:UgCne.972533$b5.42...@news3.tin.it...

io per recuperare tutto l'albero faccio questa query
SELECT COUNT(P2.id) AS 'level', P1.nome,P1.id,P1.sx,P1.dx
FROM personale AS P1, personale AS P2
WHERE P1.sx BETWEEN P2.sx AND P2.dx
GROUP BY P1.nome ORDER BY P1.sx
e a volte dopo il primo a volte dopo il secondo inserimento , non vedo i 
nodi inseriti.
ho contrallato il discorso nodo right uguale capita spesso e non è un errore 
a quanto pare.
p.s
che vantaggi ha la lib. pear ? ho trova un codice che implementa nestedset 
ma la usa vorrei capire se è indispensabile
e posso farne a meno.

 e posso farne a meno.
IMHO puoi anche farne a meno..
-- 
www.iuz-lab.info


ho controllato / aggiunto le cose che mi ha detto
tutto sembrava andare bene poi dopo che ho provato ad inserire un fiflio del 
nodo root ecco cosa ottengo
SELECT COUNT(P2.id) AS 'level', P1.nome,P1.id,P1.sx,P1.dx FROM personale AS 
P1, personale AS P2 WHERE P1.sx BETWEEN P2.sx AND P2.dx GROUP BY P1.nome 
ORDER BY P1.sx (10 Records)
level-nome-id-sx-dx-
1 Massimiliano 1 1 14
2 Francesco 2 2 13
3 Mario 3 3 4
3 Luigi 4 5 6
3 Fabio 5 7 12
4 Piero 6 8 9
4 Gianni 7 10 11
5 f_gianni 8 11 12
3 f_francesco 9 13 14
3 f_massimiliano 10 14 15
p.s
f sta per figlio


si incasina tutto quando inseriesci un figlio del nodo root

yag wrote:

ho provato ad aggiungere un nodo testando a mano sulla carta..
sei sicuro che i dati di root vengano selezionati correttamente?
cmq ti basta fare una serie di echo con l'error_reporting su E_ALL e
localizzare il punto dove si verifica il problema..
-- 
www.iuz-lab.info

"iuz" <us...@host.network> ha scritto nel messaggio 
news:BHFne.1480041$35.55...@news4.tin.it...

lo so ma errori non ne mostra sono errori come dire logici ....
solo non riesco a capirli

"iuz" <us...@host.network> ha scritto nel messaggio 
news:BHFne.1480041$35.55...@news4.tin.it...

