Salve amici,
ho un grossissimo problema con un progetto di un database.
La mia richiesta è abbastanza complessa, quindi cercherò di essere chiaro e conciso.
Ho una tabella iniziale chiamata "categorie" strutturata in questo modo
codice:
MONDO
|__ Asia
|__ Europa
| |__ Grecia
| |__ Italia
| | |__ Sardegna
| | | |__ Oristano
| | | | |__ Scano
| | | |
| | | |__ Cagliari
| | | |__ Nuoro
| | | |__ Sassari
| | |
| | |__ Liguria
| | |__ Toscana
| |
| |__ Francia
| |__ Spagna
| |__ Germania
|
|__ America
|__ Africa
|__ Oceania
Ammetto che non sia la soluzione migliore... ma la tabella è composta dai seguenti campi:
ID (PRIMARY KEY)
NOME (il nome della categoria)
SUPER (FOREIGN KEY su ID)
SUPER contiene l'ID del campo superiore
esempio:
codice:
ID NOME SUPER
1 mondo 0
2 Asia 1
3 Europa 1
4 Grecia 3
A queste categorie "partecipano" più oggetti di un'altra tabella.
Per comodità questi oggetti saranno NOTIZIE.
Nella mia situazione di partenza le NOTIZIE potevano "partecipare" (ovvero far parte) a una sola categoria, quindi erano così strutturate:
ID (PRIMARY KEY)
TITOLO
TESTO
IDCAT (ID della categoria a cui appartiene la notizia)
ORA VOGLIO CAMBIARE LE CARTE IN TAVOLA
Sempre utilizzando queste tabelle (o eventualmente creandone nuove per i riferimenti)
vorrei che le notizie facessero parte contemporaneamente di N categorie e che per visualizzare le notizie devono essere filtrate da questi criteri
idcat_1=X&idcat_2=Y&...&idcat_N=Z
in pratica se non le specifico tutte mi da i link per filtrare quelle da visualizzare.
faccio un esempio pratico con 2 livelli (da estendere a N livelli)
il giornale è composto dagli argomenti (cultura, attualità, cronaca, sport(calcio, tennis) )
e dai numeri di uscita del giornale (gen2005, feb2005, mar2005)
Una notizia fa necessariamente parte di due categorie parallele ovvero fa parte di un numero di uscita (ad esempio gen2005) e fa parte di un argomento del giornale (es. sport)
questo non è difficile da implementare: basta fare una tabella di riferimento
ID_categoria (PRIMARY KEY)
ID_notizia (PRIMARY KEY)
e usare una JOIN per leggerla
il punto è:
- se clicco sul numero di uscita mi appaiono gli argomenti contenuti (cultura, attualità, cronaca, sport...), cliccando su un argomento mi devono apparire le notizie di quell'argomento e contemporaneamente di quel numero.
- viceversa se clicco sull'argomento, mi devono apparire i numeri di uscita presenti in archivio, e cliccando sul numero di uscita mi deve dare le notizie di quell'argomento e contemporaneamente di quel numero.
- se invece clicco su un link dove è specificato sia il numero sia l'argomento, mi deve dare direttamente tutte le notizie relative.
in questo caso l'albero si incrocia perchè il figlio è padre del padre e viceversa il padre è figlio del figlio.
Infatti l'albero potrebbe essere così strutturato
codice:
ARCHIVIO
|__ gen2005
| |__ cultura
| |__ attualità
| |__ cronaca
| |__ sport
| |__ calcio
| |__ tennis
|
|__ feb2005
| |__ cultura
| |__ attualità
| |__ cronaca
| |__ sport
| |__ calcio
| |__ tennis
|
|__ mar2005
|__ cultura
|__ attualità
|__ cronaca
|__ sport
|__ calcio
|__ tennis
E ALLO STESSO TEMPO
ARCHIVIO
|__ cultura
| |__ gen2005
| |__ feb2005
| |__ mar2005
|
|__ attualità
| |__ gen2005
| |__ feb2005
| |__ mar2005
|
|__ cronaca
| |__ gen2005
| |__ feb2005
| |__ mar2005
|
|__ sport
|__ gen2005
|__ feb2005
|__ mar2005
in pratica ogni volta che inserisco un numero di uscita, automaticamente quel numero deve avere la struttura degli argomenti dei precedenti
E INFINE IL MIO PROBLEMA è
come faccio a ottenere un albero del genere senza dover ripetere ogni volta la struttura? Qual'è la soluzione migliore al mio caso, escluso il ricovero coatto?
ringrazio infinitamente tutti quelli che hanno letto questo post fino in fondo... e sarò eternamente grato chi saprà dare una risposta a questo urgentissimo problema.
grazie
Matteo