Newsgroup: it.comp.www.php
Titolo: mi serve un consiglio ...

Salve a tutti , allora ho un problema (per me un pò complicato), non volevo
scrivere qua proprio per non 'disturbare' (magari dopo che scrivo trovo pure
la soluzione) cmq... bando alle ciance ...
Allora quello che devo fare è questo :
ho un tabella con dei campi supponiamo : id - st - pr cm - cit .
1) select * from xx group by st
  3)visualizzare questo record con una formattazione dei dati stabilità da
me ,
  2) fare questa select col dato precendente (quindi vedendola semplice un
while annidato)
      select * from xx where st = $st group by pr
     4) visualizzare questo record con una formattazione dei dati stabilità
da me
ecc. ecc. fino ad arrivare a cit
Quello che vorrei evitare è proprio evitare questi while annidati (che li
detesto ) e  trovare una soluzione
stile OO riutilizzabile.
Sto pensando e ripensando ma ancora non mi è venuto in mente niente ,i
problemi principali a mio avviso sono:
1) trovare un metodo che ti permetta di "dire" alla classe o funzione come
utilizzare il valore della select precedente
2) trovare un metodo che permetta di dire come formattare i dati la
visualzzazione ...
ecco un'esempio di pseudo codice :
che dovrei evitare di scrivre
 //fai operazione "IMPORTANTI"
select = xx
 while ( ... ) {
   //formatta i dati fai altre operazione "IMPORTANTI"
    //fai  operazione "IMPORTANTI"
    select2=yy
         while ( ... ) {
           //formatta i dati fai altre operazione "IMPORTANTI"
           //fai  operazione "IMPORTANTI"
           select3=zz
             while ( ... ) {
               //formatta i dati fai altre operazione "IMPORTANTI"
    }
   }
  }
spero di essere stato chiaro :) il linguaggio è php ma a me bastano i
concetti così da poterli riusare anche in altri linguaggi
OO (c++, ecc.) , ho cercato pure fra i pattern ma non esiste niente che ti
permetta di fare questo (oppure io non l'ho trovato)
grazie ciao.

 detesto ) e  trovare una soluzione stile OO riutilizzabile.
Premetto che la clausola GROUP BY come la usi te è del tutto inutile.
Non mi è molto chiaro il tuo problema.
Quello che ho capito è che vuoi realizzare una specie di albero che ti
visualizza i dati.
Se quello che ho capito è giusto, un'alternativa potrebbe essere la
seguente.
Realizzi una query che ti restituisca tutti i risultati, ordinati per i vari
campi, in ordine preciso: ORDER BY st, pr, ...
A questo punto il lavoro è tutto di codice: inizi a scorrere il recordset,
controllando il cambiamento dei valori dei vari "livelli".
Mi spiego meglio. Supponiamo che la query ti restituisca il seguente
recordset:
id | st | pr | cm | cit
---+----+----+----+----
 1 | AA | ZZ | QQ | WW
 1 | AA | ZZ | QQ | QA
 1 | AA | ZZ | SA | ZX
...
Il concetto è questo. Inizi a visualizzare i record id=1, poi quelli st=AA e
così via, fino ad ottenere, ad esempio, una tabella così fatta:
+---+----+----+----+----+
| 1 | AA | ZZ | QQ | WW |
|   |    |    |    | QA |
+---+----+----+----+----+
| 1 |    |    | SA | ZX |
+---+----+----+----+----+
Spero di essere stato chiaro, e che questo sia il problema.
La mia soluzione ha meno query SQL, ma molto codice.
Ciao
Marco

 (che li detesto ) e  trovare una soluzione stile OO riutilizzabile.
Sei sicuro di aver strutturato il DB in modo corretto? A mio parere una
base dati "Stati -> Provincie -> Comuni -> Citta" deve essere
implementata in 4 tabelle separate.
Oltre a questo i while annidati da te proposti sono inutili, e'
sufficiente effettuare una query del tipo:
SELECT * FROM xx GROUP BY st, pr, cm, cit
e successivamente effettuare un ciclo su tutti i record del tipo:
$stato_precedente = "";
$provincia_precedente = "";
while ($row = mysql_fetch_assoc ($rs))
{
	// eventuali verifiche sui campi
	if ($stato_precedente != $row["st"])
	{
		$provincia_precedente = "";
		// inizia la lista per il nuovo stato
		// formatta i dati fai altre operazione "IMPORTANTI" 
		// per ogni stato
	}
	if ($provincia_precedente != $row["pr"])
	{
		$comune_precedente = "";
		// inizia la lista per la nuova provincia
		// formatta i dati fai altre operazione "IMPORTANTI" 
		// per ogni provincia
	}
	// etc. etc.
 
	$stato_precedente = $row["st"];
	$provincia_precedente =  $row["pr"];
}
-- 
I am what I am, I do what I can
Sei un newbie? Leggi questo 
http://url.repository.biz/go/1
Inviare email con allegati? 
http://url.repository.biz/go/1Z
Cerchi un programmatore PHP/MySQL? 
http://url.repository.biz/go/1Y

Sulla basedati hai ragione.. purtroppo non l'ho fatta io e non ci posso
mettere mano ergo
mi devo accontentare ...
cercherò di analizzare la tua soluzione in pratica quello che devo gestire è
una sorta di  treeview

... vorrei puntualizzare una cosa premettendo che non sto pretendendo...
forse vi siete persi il coree della mia domanda :) io volevo trovare una
soluzione
riutilizzabile ...non customizzata :) e possibilmente OO
p.s
comunque le vostre risposte sono state molto utili...
ri grazie ciauz :)

un ultima nota.. ho provato a mettere in atto questo cosa ma non ci sono
riuscito e poi in questo
hai dati duplicati (a quello serviva il group by)