... avevo gridato vittoria troppo presto
la query sopra non sò il perchè ma mi estrae sempre e solo un unico record.
Riporto questi dati sperando di trovare un'anima pia che mi dia una mano
... sono giorni che sto smanettando con una query e sto impazzendo con le join.
Ho un db così strutturato:
codice:
CREATE TABLE IF NOT EXISTS `articoli` (
`id_articolo` int(11) NOT NULL AUTO_INCREMENT,
`id_capitolo` int(11) NOT NULL,
`id_utente` int(11) NOT NULL,
`sub_titolo` varchar(255) NOT NULL,
`testo` text NOT NULL,
PRIMARY KEY (`id_articolo`)
)
CREATE TABLE IF NOT EXISTS `capitoli` (
`id_capitolo` int(11) NOT NULL AUTO_INCREMENT,
`titolo` varchar(255) NOT NULL,
PRIMARY KEY (`id_capitolo`)
)
CREATE TABLE IF NOT EXISTS `argomenti_articolo` (
`id_rel_arg` int(11) NOT NULL AUTO_INCREMENT,
`id_argomento` int(11) NOT NULL,
`id_articolo` int(11) NOT NULL,
PRIMARY KEY (`id_rel_arg`)
)
CREATE TABLE IF NOT EXISTS `argomenti` (
`id_argomento` int(11) NOT NULL AUTO_INCREMENT,
`argomento` varchar(40) NOT NULL DEFAULT 'altro',
PRIMARY KEY (`id_argomento`)
)
CREATE TABLE IF NOT EXISTS `utenti` (
`id_user` int(11) NOT NULL AUTO_INCREMENT,
`nome` varchar(60) NOT NULL,
PRIMARY KEY (`id_user`)
)
CREATE TABLE IF NOT EXISTS `commenti` (
`id_commento` int(11) NOT NULL AUTO_INCREMENT,
`id_articolo` int(11) NOT NULL,
PRIMARY KEY (`id_commento`)
)
Le relazioni:
articoli-capitoli è molti a 1 (ogni articolo è associato ad uno specifico capitolo)
articoli-argomenti è molti a molti (ogni articolo può avere diversi argomenti)
articoli-commenti è 1 a molti (ogni articolo può avere più commenti)
articoli-utenti è molti a 1 (ogni articolo ha uno specifico utente/autore)
Io devo estrarre per ogni articolo:
- il nome del capitolo associato
- l'autore (NB: è unico)
- il numero di commenti
- la lista degli argomenti e i relativi id: essendo una relazione molti a molti quindi viene fuori GROUP_CONCAT()...
Per i primi 3 punti ho risolto così
codice:
SELECT DISTINCT
capitoli.titolo
AS capitolo,
articoli.sub_titolo
AS subtitolo,
articoli.testo
AS testo,
utenti.nome
AS autore,
(SELECT COUNT(commenti.id_commento) FROM commenti WHERE commenti.id_articolo=articoli.id_articolo)
AS numero_commenti
FROM
articoli
INNER JOIN
utenti ON (utenti.id_user=articoli.id_utente)
INNER JOIN
capitoli
ON (capitoli.id_capitolo=articoli.id_capitolo)
LEFT OUTER JOIN
commenti ON (commenti.id_articolo=articoli.id_articolo)
Ora come posso estrarre anche gli id_argomento e argomento?
Essendo una relazione molti a molti devo concatenare il tutto in una stringa con GROUP_CONCAT() ma nn ci riesco in nessun modo.
Voglio evitare di fare 2 query...