albero categorie articolo sql

GEGGI

Nuovo Utente
29 Set 2017
2
0
1
Buonasera , ho un problema , ho una tabella con delle categorie articolo e queste cartelle sono contatenate tra loro, solamente che non so come posso dire a sql server di mettere di contatenarle tra madre figli nipoti
metto la tabbella in modo da essere più chiaro
id_categoria descrizione idCategoriaMadre
---------------|--------------------------------|----------------------|
30 |diesel | NULL
31 |diesel_bimbo | 30
32 |diesel bimba | 30
33 |diesel bimbo giacchetto | 31
34 |diesel bimbo tshirt | 31
35 |diesel bimbo felpa | 31
36 |diesel bimba giacchetti | 32
37 |diesel bimba gonna | 32
38 |diesel bimba felpa | 32
-------------------------------------------------------------------------

io da questa tabella vorrei fare una queri che mi faccia vedere su tre campi i tre livelli delle categorie articolo
ho scritto questa query , che funziona per la prima categoria ma non so come andare avanti

use [dbnegozio]

go

with CatPriLiv as

(SELECT id as id_categoria,nome,descrizione,idCategoriaMadre

from CategoriaArticolo

where CategoriaArticolo.isAttivo = 1 and id >= 30
)
select CatPriLiv.id_categoria,CatPriLiv.descrizione ,CatPriLiv.idCategoriaMadre,
CategoriaArticolo.nome as categoriaprimolivello

from CatPriLiv

left join CategoriaArticolo on CatPriLiv.idCategoriaMadre = CategoriaArticolo.id
--------------------------------------------------
in questo modo ottengo
id_categoria descrizione idCategoriaMadre categoriaprimolivello
---------------|--------------------------------|----------------------|----------------------------
30 |diesel | NULL |NULL
31 |diesel_bimbo | 30 |diesel
32 |diesel bimba | 30 |diesel
33 |diesel bimbo giacchetto | 31 |diesel_bimbo
34 |diesel bimbo tshirt | 31 |diesel_bimbo
35 |diesel bimbo felpa | 31 |diesel_bimbo
36 |diesel bimba giacchetti | 32 |diesel bimba
37 |diesel bimba gonna | 32 | diesel bimba
38 |diesel bimba felpa | 32 |diesel bimba
----------------------------------------------------------------------------------------------------
adesso vorrei continuare per ricostruire l'albero cioè mettere unulteriore colonna dove c'è la categoria principale
id_categoria descrizione idCategoriaMadre categoriaprimolivello categoriaprincipale
---------------|--------------------------------|----------------------|----------------------------|---------------------|
30 |diesel | NULL |NULL |NULL
31 |diesel_bimbo | 30 |diesel |NULL
32 |diesel bimba | 30 |diesel |NULL
33 |diesel bimbo giacchetto | 31 |diesel_bimbo |diesel
34 |diesel bimbo tshirt | 31 |diesel_bimbo |diesel
35 |diesel bimbo felpa | 31 |diesel_bimbo |diesel
36 |diesel bimba giacchetti | 32 |diesel bimba |diesel
37 |diesel bimba gonna | 32 | diesel bimba |diesel
38 |diesel bimba felpa | 32 |diesel bimba |diesel
-----------------------------------------------------------------------------------------------------------------------------

scusate srà una richiesta stupida ma non riesco ad uscirne
grazie in anticipo e scusate se ho scritto boiate il linguaggio slq non è il mio forte
 

marino51

Utente Attivo
28 Feb 2013
3.041
192
63
Lombardia
srà una richiesta stupida
tutt'altro che....
si tratta di gestire un "Hierarchical Data Model" (queste le parole se vuoi cercare documentazione)
l' ho sviluppato su sql server (non è solo farina del mio sacco), memorizzando due procedure che se chiamate forniscono i risultati nelle direzioni alto-basso e viceversa vedi figura,

upload_2017-9-29_19-58-35.png


la tabella di partenza è valida e se ti va bene il risultato, ti posto le due procedure da memorizzare
 

GEGGI

Nuovo Utente
29 Set 2017
2
0
1
Intanto grazie per la risposta celere, si il risultato va bene forse se fosse possibile la descrizione della categoria invece che l'id (NodeSequenze) sarebbe perfetta e grazie per le parole chiave cosi studio un po'!
 

marino51

Utente Attivo
28 Feb 2013
3.041
192
63
Lombardia
noto che hai usato l'id automatico come categoria, rispetto la scelta ma potrebbe essere un rischio nel futuro,
in ogni caso ti propongo una soluzione che "interfaccia" la tua tabella con le procedure (query) per la selezione

dovresti creare una view
PHP:
CREATE VIEW [GLHierarchyV] AS
    SELECT
        id               as GLID,
        id               as GLCD,
        descrizione      as GLDesc,
        idCategoriaMadre as ParentGLCD
    FROM CategoriaArticolo
    WHERE isAttivo = 1
la view non ha impatto sul sistema, essendo di fatto solo un alias della tua tabella

quindi puoi memorizzare la procedura per la ricerca "drill down"
PHP:
create function GLSubordinates_v1( @GLCD varchar(10) )
    returns table as return with GLSubnodes
        ( distance, GLID, GLCD, GLDesc, ParentGLCD, NodeSequence ) as

        ( select 0, h.GLID, h.GLCD, h.GLDesc, h.ParentGLCD, convert( varchar(255), ltrim(h.GLDesc)) as NodeSequence
              from [GLHierarchyV] h
              where h.GLCD = @GLCD
          union all
          select distance+1,  h.GLID, h.GLCD, h.GLDesc, h.ParentGLCD, convert( varchar(255), sn.NodeSequence+'/'+ltrim(h.GLDesc))
              from [GLHierarchyV] h
              inner join GLSubnodes sn on h.ParentGLCD = sn.GLCD )
    select distance, GLID, GLCD, GLDesc, ParentGLCD, NodeSequence
        from GLSubnodes

poi la procedura per la ricerca inversa
PHP:
create function GLSuperiors_v1( @GLCD varchar(10) )
    returns table as return with GLSupnodes
        ( distance, GLID, GLCD, GLDesc, ParentGLCD, ParentGLDesc ) as

        ( select 0, h.GLID, h.GLCD, h.GLDesc, h.ParentGLCD,
              ( select d.GLDesc from [GLHierarchyV] d where d.GLCD = h.ParentGLCD ) ParentGLDesc
              from [GLHierarchyV] h
              where h.GLCD = @GLCD
          union all
          select distance-1, h.GLID, h.GLCD, h.GLDesc, h.ParentGLCD,
              ( select d.GLDesc from [GLHierarchyV] d where d.GLCD = h.ParentGLCD ) ParentGLDesc
              from [GLHierarchyV] h
              inner join GLSupnodes sn on h.GLCD = sn.ParentGLCD )
    select distance, GLID, GLCD, GLDesc, ParentGLCD, ParentGLDesc
        from GLSupnodes

puoi richiamare le procedure molto semplicemente,
PHP:
SELECT * FROM GLSubordinates_v1('30')

SELECT * FROM GLSuperiors_v1('38')

questo il risultato,

upload_2017-9-30_22-54-6.png


fai sapere
 

marino51

Utente Attivo
28 Feb 2013
3.041
192
63
Lombardia
volendo puoi aggiungere opzioni di ordinamento
PHP:
SELECT * FROM GLSubordinates_v1('30') order by NodeSequence

upload_2017-9-30_23-4-41.png


se necessitano nomi di colonne specifici, si possono elencare come alias sostituendo nella "SELECT *"
 
Ultima modifica:
Discussioni simili
Autore Titolo Forum Risposte Data
A Albero Categorie Esploso con Javascript Javascript 2
N Struttura ad Albero di Directory _ PHP PHP 2
M [PHP] struttura ad albero PHP 1
_SAGO [Javascript] Albero di # Javascript 1
D Trasformazione da Albero 2-3 a B-Albero e viceversa e da Albero RB ad Albero 2-3 Programmazione 1
A Visualizzare albero DOM completo oppure Visualizzare Nodi che fanno parte di una Selezione Javascript 6
ypsilon86 gestire un albero genealogico con PHP e Mysql PHP 0
N Icone del Treeview - Menù ad Albero Javascript 2
N Treeview - Albero Javascript 28
C flash cs4-effetto albero che cresce Flash 0
P menu albero Classic ASP 1
G Struttura ad albero binario PHP 0
S Menu ad albero non visualizzabile Javascript 2
M Aiuto per Modifica javascript prer menu ad albero Javascript 1
T problemi menu ad albero Javascript 0
B Menu ad albero Javascript 2
MarcoGrazia Categorie per settore merceologico di Google SEO e Posizionamento 0
W [WooCommerce] importare Prodotti suddivisi con: Categorie, Prodotti, Attributi E-Commerce 6
W [WordPress] Non si vedono le categorie da aggiungerle al Top Menu WordPress 3
S [PHP] categorie portfolio wordpress WordPress 3
Jonn [WordPress] Gestione categorie e tags per sito eventi WordPress 2
V Semplice barra di ricerca con filtro categorie prodotti E-Commerce 0
M COMPRO Pagine Facebook Pago Bene (Categorie Sport, Intrattenimento, Moda) Annunci servizi di Social Media Marketing 1
K Wordpress e pagine di categorie WordPress 2
T COMPRO Spazio Pubblicitario su pagine Facebook delle seguenti categorie: Vendere e Acquistare pubblicita' online 1
M Query mysql per selezioni random in categorie mirate PHP 4
L Ordinare articoli dentro categorie e tag in ordine alfabetico wordpress WordPress 1
Elisacau woo commerce schermare categorie. E-Commerce 1
felino [Cerco / Retribuito] Prestashop: import prodotti e categorie da Virtumart Offerte e Richieste di Lavoro e/o Collaborazione 0
L Creazione tabelle per Categorie articoli MySQL 2
filippino Inserire un articolo in più categorie è penalizzante lato seo? SEO e Posizionamento 0
F Gestione portfolio / categorie con relazione molti a molti MySQL 7
filippino SEO: Non indicizzare categorie e tag? SEO e Posizionamento 0
felino [Joomla 1.5.26] Nome categorie e sezione negli URL delle pagine Joomla 1
MarcoGrazia Gestire gruppi e categorie di link con PHP PHP 1
Nik Articoli suddivisi in categorie dentro accordion tab WordPress 0
asevenx dubbi per sito wordpress: menu categorie e articoli di una categoria riportati nella colonna WordPress 1
Alessandro Le Mura Lista categorie index.php?categoria=nome PHP 4
R menù categorie uguali Leggi, Normative e Fisco 0
P Banner più vicino alle categorie WordPress 0
T Categorie e Anunci PHP 1
T Inserire automaticamente Categorie in hikashop da php mysql PHP 0
J Informazioni categorie WordPress 0
pup3770 Problema categorie phocagallery Joomla 3
davide1982 Raggruppare dati in categorie con group by MySQL 2
Athene Scelta delle categorie tramite un'interrogazione del database PHP 11
S Menù dinamico con categorie e sottocategorie Classic ASP 8
L creare sistema multi categorie MySQL 18
Y Aiuto per rappresentazione grafica di struttura Categorie sottocategorie - 3 livelli PHP 1
S sotto categorie moltiplicate... Classic ASP 1

Discussioni simili