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 :

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
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.

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 ?