Newsgroup: it.comp.www.php
Titolo: nested  set . query o codice

salve sto cercando il modo di
sapere dato id,sx,dx  e data un'altr a tripletta di valori id,sx,dx
se il secondo è parente del primo e (AND) se sta sopra al primo nella
gerarchia.
Come potrei fare  ?
mi serve per poter aprire e chiudere detterminati rami di un albero...
tipo:
root
tipo1
tipo2
ora se l'utente preme tipo1 devo mostrare
root
    tipo1
        sottotitpi1
    tipo2
cioè solo i figli di tipo1 e non tipo due tutto tramite questa
  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
Ovvero una query che mostra tutto l'albero espanso.
grazie ciao

 gerarchia.
Tralasciando che se e' parente (inteso come genitore) allora sara'
sicuramente "sopra" (inteso come facente parte dello stesso ramo).
dati id1, sx1, dx1 e id2, sx2, dx2
if ((sx2 < sx1) && (dx2 > dx1)) {
	print ("sx2 e' sopra a sx1");	
}
Per sapere se e' il nodo parente ossia il nodo genitore consiglio di
utilizzare o un campo Level oppure un campo IDParent.
-- 
I am what I am, I do what I can
Sei un newbie? Leggi questo 
http://url.repository.biz/go/3C
Vuoi supportarmi? 
http://url.repository.biz/go/3E
Do. Or do not. There is not try.

 utilizzare o un campo Level oppure un campo IDParent.
io sono riuscito a fare questo i numeri sono livello ed id
1->Massimiliano,1
2--->Prodotti,10
2--->Viallaggio,19
se premo su  prodotti
1->Massimiliano,1
2--->Prodotti,10
3----->carcioffi,15
3----->melanzane,16
3----->pepperoni,17
3----->pomodori,18
però non trovo il modo di visualizzare prodotti e figli e tutti i nodi figli
di massimiliano :|

 nodi figli di massimiliano :|
Scusa, ma dove sono i valori sx e dx?



Tengo a precisare che sono test cmq per ora gli passo nel link cosě
  $call =  $line['level']."<a
href=\"index.php?lev=$lev&sx=".$line['sx']."&dx=".$line['dx']."&id=".$line['
id']."\">$link</a>";

 Tengo a precisare che sono test cmq per ora gli passo nel link cosl
Continuo a non capire, posta un esempio con tutti i valori disponibili
(id, sx, dx etc) e quello che vuoi ottenere, altrimenti e' come giocare
a mosca cieca.


 Come potrei fare  ?
usare PRIOR , CONNECT BY ma soprattutto usare il newsgroups giusto? 

 ha scritto nel messaggio
news:m0oXd.1026829$35.38...@news4.tin.it...

che sono ?


eseguo 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 poi faccio
while ($line = mysql_fetch_assoc($res)) {
  //condizioni
  //se livello = valido
  //se il nodo è padre del nodo target
  if ($line['level']  <= $hwlev) {
     ...
     //   e per ogni nodo faccio
    $call =  $line['level']."<a
href=\"index.php?lev=$lev&sx=".$line['sx']."&dx=".$line['dx']."&id=".$line['
id']."\">$link</a>";
    echo $call
 }
....
}

 wrote in message 
news:CNpXd.634758$b5.28...@news3.tin.it...

sql

 sql
In quale versione?
-- 
I am what I am, I do what I can



Ok posto il codice completo
require_once 'mysqlconnect.php';
require_once 'nestedset.php';
$sql = "
  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 ";
  $res = mysql_query($sql);
   $hwlev =  $_GET['lev'];
   while ($line = mysql_fetch_assoc($res)) {
  if ($line['level']  <= $hwlev)
  if ($line['level'] > $lev2) {
   $ident.="-";
  }
  if ($line['level']  <= $hwlev)
  if ($line['level'] < $lev2) {
   $ident= substr($ident,0,strlen($ident));
  }
  $link = $ident.">".$line['nome'].",".$line['id']."<br>";
  $lev = $line['level'] +1 ;
  $call =  $line['level']."<a
href=\"index.php?lev=$lev&sx=".$line['sx']."&dx=".$line['dx']."&id=".$line['
id']."\">$link</a>";
  if ($line['level']  <= $hwlev)
  echo $call;
  $lev = $line['level'];
  $lev2 = $line['level'];
 }
}
ci sono un pò di giri ma ripeto sono solo test

 >
<snip>
Ho semplificato un pò il codice :-)
$sql = "
  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 ";
  $res = mysql_query($sql);
   $hwlev =5;
   $lev = 2;
while ($line = mysql_fetch_assoc($res)) {
  $ident = '|'.str_repeat('--',$line['level']);
  $link = $ident.">".$line['nome'].",".$line['id']."<br>";
  $lev = $line['level'] +1 ;
  $call =  $line['level']."<a
href=\"?lev=$lev&sx=".$line['sx']."&dx=".$line['dx']."&id=".$line['id']."\">
$link</a>";
  if ($line['level']  <= $hwlev) {
  echo $call;
  }
  $lev = $line['level'];
 }
in pratica fa questo:
1|-->Massimiliano,1
2|---->Prodotti,10
3|------>carcioffi,15
3|------>melanzane,16
3|------>pepperoni,17
3|------>pomodori,18
4|-------->Verdi,26
4|-------->Gialli,27
4|-------->Arancioni,28
2|---->Viallaggio,19
3|------>castedd,20
3|------>Merau,21
3|------>Serba,22
4|-------->Casa Mia,23
4|-------->Casa di Raffaele,24
4|-------->Chiesa,25

 ha scritto nel messaggio
news:oWCXd.636362$b5.28...@news3.tin.it...

comportamento dinamico :
purtroppo non trovo un host freee per farvi vedere cosa ho fatto cmq
metto un link ad una foto
http://yag.altervista.org/nested/nested.jpg
per far capire che succede io invece di questo risultato vorrei aperti solo
i nodi di "prodotto" e tutti i sotto nodi di massimiliano
ma non i sotto nodi di villaggio
spero di essermi spiegato
grazie

 In quale versione?
Oracle sicuramente, non so quanti altri db la supportino; continuo a pensare 
che non si tratti del newsgroup giusto in ogni caso...