par
sadeq » 25 août 2009, 09:40
Bonjour,
Il te faut effectivement créer une table de référence qui contient la liste des mois puis faire une jointure externe avec ta table pour faire le comptage. C'est la jointure externe qui permettra de compter un zéro pour les mois absents de ta table de travail.
Voici comment, dans le cadre d'un exemple simple:
Voici la structure de la base de données de l'exemple qui contient 2 tables : la table des mois et celle qui contient les n° des clients par mois.
Code : Tout sélectionner
-- phpMyAdmin SQL Dump
-- version 3.1.1
-- http://www.phpmyadmin.net
--
-- Serveur: localhost
-- Généré le : Mar 25 Août 2009 à 09:28
-- Version du serveur: 5.1.30
-- Version de PHP: 5.2.8
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
--
-- Base de données: `test`
--
-- --------------------------------------------------------
--
-- Structure de la table `clients_mois`
--
CREATE TABLE IF NOT EXISTS `clients_mois` (
`n°client` int(11) NOT NULL,
`mois` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
--
-- Contenu de la table `clients_mois`
--
INSERT INTO `clients_mois` (`n°client`, `mois`) VALUES
(25, 1),
(26, 1),
(29, 1),
(32, 2),
(65, 2),
(69, 4);
-- --------------------------------------------------------
--
-- Structure de la table `mois`
--
CREATE TABLE IF NOT EXISTS `mois` (
`mois` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
--
-- Contenu de la table `mois`
--
INSERT INTO `mois` (`mois`) VALUES
(1),
(2),
(3),
(4),
(5),
(6),
(7),
(8),
(9),
(10),
(11),
(12);
Voici donc la requête SQL qui compte:
Code : Tout sélectionner
SELECT m.mois, count(cm.mois) FROM mois m left join `clients_mois` cm on m.mois = cm.mois
Group By m.mois
Le résultat est :
Code : Tout sélectionner
mois count(cm.mois)
1 3
2 2
3 0
4 1
5 0
6 0
7 0
8 0
9 0
10 0
11 0
12 0
Bonjour,
Il te faut effectivement créer une table de référence qui contient la liste des mois puis faire une jointure externe avec ta table pour faire le comptage. C'est la jointure externe qui permettra de compter un zéro pour les mois absents de ta table de travail.
Voici comment, dans le cadre d'un exemple simple:
Voici la structure de la base de données de l'exemple qui contient 2 tables : la table des mois et celle qui contient les n° des clients par mois.
[code]-- phpMyAdmin SQL Dump
-- version 3.1.1
-- http://www.phpmyadmin.net
--
-- Serveur: localhost
-- Généré le : Mar 25 Août 2009 à 09:28
-- Version du serveur: 5.1.30
-- Version de PHP: 5.2.8
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
--
-- Base de données: `test`
--
-- --------------------------------------------------------
--
-- Structure de la table `clients_mois`
--
CREATE TABLE IF NOT EXISTS `clients_mois` (
`n°client` int(11) NOT NULL,
`mois` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
--
-- Contenu de la table `clients_mois`
--
INSERT INTO `clients_mois` (`n°client`, `mois`) VALUES
(25, 1),
(26, 1),
(29, 1),
(32, 2),
(65, 2),
(69, 4);
-- --------------------------------------------------------
--
-- Structure de la table `mois`
--
CREATE TABLE IF NOT EXISTS `mois` (
`mois` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
--
-- Contenu de la table `mois`
--
INSERT INTO `mois` (`mois`) VALUES
(1),
(2),
(3),
(4),
(5),
(6),
(7),
(8),
(9),
(10),
(11),
(12);
[/code]
[b]Voici donc la requête SQL qui compte:[/b]
[code]SELECT m.mois, count(cm.mois) FROM mois m left join `clients_mois` cm on m.mois = cm.mois
Group By m.mois [/code]
Le résultat est :
[code]mois count(cm.mois)
1 3
2 2
3 0
4 1
5 0
6 0
7 0
8 0
9 0
10 0
11 0
12 0[/code]