Forse la domanda è stata già posta, ma non nello specifico, in pratica devo far uscire da dal database dei valori anche se nulli (che saranno mostrati come 0 ).
In pratica ho due tabelle: una con titoli di racconti ed una con i generi letterari disponibili, partendo da quest'ultima devo fare una query che mi da tutti i generi letterari esistenti e in più, prendendo il dato dalla tabella titoli, tutti i racconti (count) associati ad un dato genere letterario.
La query che ho provato è questa:
La quale mi restituisce giustamente:Codice PHP:
$sql = 'SELECT COUNT(titoli.titolo) AS C, categorie.categoria, categorie.id_categorie ';
$sql .= 'FROM categorie ';
$sql .= 'INNER JOIN titoli ON titoli.categoria_id = categorie.id_categorie ';
$sql .= 'WHERE categorie.visibile = 1 AND titoli.visibile = 1 ';
$sql .= 'GROUP BY categorie.categoria ';
$sql .= 'ORDER BY categorie.categoria ASC ; --';
$handle = $pdo->prepare($sql);
$handle->execute();
$generiLetterari = $handle->fetchAll();
$handle->closeCursor();
Tralasciando i generi letterari che ancora non hanno un racconto associato.
# Categorie Opere presenti 1 Fantascienza 4 2 Interviste 3 3 Sentimentali 1
Non so come fare a far apparire anche questi.
Le tabelle:
I titoli
Le categorieCREATE TABLE `titoli` (
`id_titoli` int(10) UNSIGNED NOT NULL,
`titolo` varchar(256) NOT NULL,
`tagline` varchar(256) DEFAULT NULL COMMENT 'Eventuale sottotitolo',
`autore_id` int(10) UNSIGNED NOT NULL,
`categoria_id` int(10) UNSIGNED NOT NULL,
`data_iscrizione` timestamp NOT NULL DEFAULT current_timestamp(),
`visibile` tinyint(4) NOT NULL DEFAULT 0 COMMENT '0=invisibile (predefinito) 1 = visibile a tutti',
`modificabile` tinyint(3) UNSIGNED NOT NULL DEFAULT 1 COMMENT '0=da modificare, 1=pronto per la lettura (predefinito)',
`id_mod` int(10) UNSIGNED DEFAULT 0,
`note` varchar(2048) DEFAULT NULL COMMENT 'Eventuali note da parte dei moderatori',
`data_modifica` datetime DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Liste dei titoli presenti';
CREATE TABLE `categorie` (
`id_categorie` int(10) UNSIGNED NOT NULL,
`categoria` varchar(256) NOT NULL,
`sotto_genere` varchar(256) DEFAULT NULL,
`visibile` tinyint(3) UNSIGNED NOT NULL DEFAULT 0 COMMENT '0=invisibile (predefinita) 1=visibile (attiva)',
`id_mod` int(10) UNSIGNED NOT NULL DEFAULT 0 COMMENT 'l''Admin/mod che ha modificato qualcosa',
`note` varchar(2048) DEFAULT NULL COMMENT 'Eventuali note di modifica',
`data_inserimento` datetime NOT NULL DEFAULT current_timestamp(),
`data_modifica` datetime DEFAULT NULL COMMENT 'Attiva con la modifica dei dati'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Categorie per la classificazione dei racconti';