PDA

View Full Version : [MySQL] particolarità su una query


Argosoft
04-06-2005, 19:12
Salve! chi si rivede, brrr :D
Ho bisogno di un consiglio per una query.. una finezza, un pelo nell'uovo... però mi piacerebbe saperla :)
La situazione è: sto creando un forum in php come tesi d'esame, e nello scriverlo mi sono imbattuto nel problema di visualizzare il "path" delle sezioni data una sezione specifica.. per intenderci, questo qua

http://img161.echo.cx/img161/4663/p5ay.jpg

ho una tabella contenente le sezioni, e c'è la possibilità di annidarle all'infinito :p :D ogni sezione ha un codice e un riferimento alla sezione padre, che può valere -1 se la sezione padre è la index del forum. Mò... per creare il path avevo pensato a 2 metodi:

- data una sezione di codice n, tramite un ciclo faccio tante query finché non trovo che la sezione attuale punta a -1;

- tramite php mi costruisco una self-join gigante del tipo:
SELECT s1.title, s1.id_section, s2.title, s2.id_section, s3.title, s3.id_section
FROM sections AS s1, sections AS s2, sections AS s3
WHERE s3.id_parent_section = s2.id_section AND s2.id_parent_section = s1.id_section AND s3.id_section = n

la domanda è: in termini di prestazioni, qual è la soluzione migliore? visto che di sezioni annidate ce ne possono essere finché il database ne tiene (beh, vabbè.. magari nella gestione delle sezioni metterò un limite di 10, toh, ma cmq un max 10 query solo per creare il path sono consigliabili? )

grazie a chi risponderà! :)


PS! sto forum non rimarrà come tesina.. andrà installato sul mio sito e quindi su un server serio.. ecco perché mi interessa sapere questa cosa :)
ciau!

kingv
04-06-2005, 20:15
in termini di prestazioni probabilmente la soluzione con cui ti costruisci una unica query gigante è migliore, visto che le query nel primo caso potenzialmente potrebbero essere tante e perciò potresti avere l'overhead della rete e del parsing dell'sql.

con database più potenti (db2, oracle) potresti risolvere molto elegantemente con le query ricorsive. :p

Argosoft
04-06-2005, 21:09
in termini di prestazioni probabilmente la soluzione con cui ti costruisci una unica query gigante è migliore, visto che le query nel primo caso potenzialmente potrebbero essere tante e perciò potresti avere l'overhead della rete e del parsing dell'sql.

con database più potenti (db2, oracle) potresti risolvere molto elegantemente con le query ricorsive. :p

http://www.vocinelweb.it/faccine/confuse/pag2/25.gif :D

quindi una mega self-join non è così pesante come pensavo... ok!


DENGHS! :)

Argosoft
05-06-2005, 15:17
maaammamia che robba che sta venendo fuori!! :sbav: http://www.vocinelweb.it/faccine/confuse/83.gif

...metti che poi voglio rilasciare il forum sotto qualche licenza, come Creative Commons? Che cosa si deve fare? jfdasdijangffb fgafgnrewi lol pbrbrbrbrb! :D

ancora grazie a kingv! :cincin:

http://img12.echo.cx/img12/4522/forum02df.th.png (http://img12.echo.cx/my.php?image=forum02df.png)

http://img12.echo.cx/img12/4742/forum16bi.th.png (http://img12.echo.cx/my.php?image=forum16bi.png)

http://img12.echo.cx/img12/8636/forum25pz.th.png (http://img12.echo.cx/my.php?image=forum25pz.png)




AH... non fate caso ai colori :D