Bonjour à tous,
Je ne savais pas comment formuler le sujet, je m'excuse si ce n'est pas clair.
J'ai une table k_article qui contient des articles, une table k_category qui contient des catégories, et une table k_article_has_category qui me permet de savoir à quelle(s) catégorie(s) appartient un article.
Voici leur structure :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51 -- -------------------------------------------------------- -- -- Structure de la table `k_article` -- CREATE TABLE `k_article` ( `id` int(10) unsigned NOT NULL auto_increment, `iduser` int(10) unsigned NOT NULL default '0', `isolanguage` char(4) NOT NULL default 'en', `title` tinytext NOT NULL, `hat` mediumtext NOT NULL, `text` longtext NOT NULL, `date` date NOT NULL default '0000-00-00', `status` char(10) NOT NULL default 'normal', PRIMARY KEY (`id`), KEY `iduser` (`iduser`,`isolanguage`), FULLTEXT KEY `search` (`title`,`text`,`hat`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; -- -------------------------------------------------------- -- -- Structure de la table `k_article_has_category` -- CREATE TABLE `k_article_has_category` ( `id` int(10) unsigned NOT NULL auto_increment, `idarticle` int(10) unsigned NOT NULL default '0', `idcategory` int(10) unsigned NOT NULL default '0', PRIMARY KEY (`id`), KEY `idarticle` (`idarticle`), KEY `idcategory` (`idcategory`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; -- -------------------------------------------------------- -- -- Structure de la table `k_category` -- CREATE TABLE `k_category` ( `id` int(10) unsigned NOT NULL auto_increment, `isolanguage` char(5) NOT NULL, `label` char(32) NOT NULL, `description` char(50) NOT NULL, `url_format` char(255) NOT NULL, PRIMARY KEY (`id`), KEY `idlanguage` (`isolanguage`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0 AUTO_INCREMENT=1 ;
J'aimerais simplement récupérer les noms (champs "label") de chaque catégorie et le nombre d'article par catégorie.
J'avais fait ça :
Ca fonctionne très bien sauf que si dans ma table de liaison k_article_has_category j'ai une catégorie qui n'a plus d'article associé (suite à la suppression d'un article par exemple), cette requête ne me la récupère pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 SELECT DISTINCT COUNT( `k_article`.`id` ) AS `nb` , `k_category`.`id` , `k_category`.`label` , `k_category`.`label` FROM `datingsim`.`k_category` , `datingsim`.`k_article_has_category` , `datingsim`.`k_language` , `datingsim`.`k_article` WHERE `k_article`.`id` = `k_article_has_category`.`idarticle` AND `k_category`.`id` = `k_article_has_category`.`idcategory` AND `k_language`.`iso` = `k_category`.`isolanguage` AND `k_language`.`iso` = 'fr' GROUP BY `k_category`.`label` LIMIT 0 , 30
J'aurais voulu qu'elle me récupère tout de même toutes les catégories et qu'elle me donne "0" dans le cas où elle ne trouve plus d'article associé à cette catégorie.
Est-ce qu'une bonne âme pourrait m'expliquer un peu comment sortir de ce sac de noeud ?
Partager