par
jeanBap » 06 avr. 2010, 00:36
bonjour,
voici les tables:
--
-- Structure de la table `galerie`
--
CREATE TABLE IF NOT EXISTS `galerie` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`Reportage_Id` int(11) DEFAULT NULL,
`ShortName` varchar(25) NOT NULL,
`LongName` varchar(25) DEFAULT NULL,
`Date` datetime DEFAULT NULL,
`Lieu` varchar(50) DEFAULT 'Paris, France',
`Description` longtext,
`Audit_Current` enum('Y','N') NOT NULL DEFAULT 'Y',
`Audit_DateTime` datetime NOT NULL,
`Position` int(11) NOT NULL DEFAULT '1',
`Position_Origine` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`Id`),
KEY `Reportage_Id` (`Reportage_Id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
--
-- Contenu de la table `galerie`
--
INSERT INTO `galerie` (`Id`, `Reportage_Id`, `ShortName`, `LongName`, `Date`, `Lieu`, `Description`, `Audit_Current`, `Audit_DateTime`, `Position`, `Position_Origine`) VALUES
(1, 2, 'test1', 'Ceci est un test', '2010-04-05 00:00:00', 'Paris 8', 'test\n\ntesst\n\n<strong>test</strong>test\n\ntesst\n\n<strong>test</strong>test\n\ntesst\n\n<strong>test</strong>test\n\ntesst\n\n<strong>test</strong>', 'Y', '2010-04-05 18:45:08', 1, 0),
(2, 2, '2', '2', '0000-00-00 00:00:00', '', 'Un 2eme ajout de galerie', 'Y', '2010-04-05 18:48:58', 2, 0),
(3, 2, 'test', '', '0000-00-00 00:00:00', '', '<strong>dxvdf</strong>', 'N', '2010-04-05 19:30:04', 3, 0),
(4, 1, 'test', NULL, NULL, 'Paris, France', NULL, 'Y', '0000-00-00 00:00:00', 1, 0);
-- --------------------------------------------------------
--
-- Structure de la table `photo`
--
CREATE TABLE IF NOT EXISTS `photo` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`Galerie_Id` int(11) DEFAULT NULL,
`Commentaire` varchar(25) NOT NULL,
`Photo` varchar(125) DEFAULT NULL,
`Miniature` varchar(125) DEFAULT NULL,
`Audit_Current` enum('Y','N') DEFAULT 'Y',
`Audit_DateTime` datetime NOT NULL,
`Position` int(11) NOT NULL DEFAULT '1',
`Position_Origine` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`Id`),
KEY `Galerie_Id` (`Galerie_Id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ;
--
-- Contenu de la table `photo`
--
INSERT INTO `photo` (`Id`, `Galerie_Id`, `Commentaire`, `Photo`, `Miniature`, `Audit_Current`, `Audit_DateTime`, `Position`, `Position_Origine`) VALUES
(1, 1, 'photo1', '/Galerie/1-test1/mn_01.jpg', '/Galerie_mini/1-test1/mn_01.jpg', 'Y', '0000-00-00 00:00:00', 1, 0),
(2, 1, 'phot2', '/Galerie/1-test1/vs_03.jpg', '/Galerie_mini/1-test1/vs_03.jpg', 'N', '0000-00-00 00:00:00', 2, 2),
(3, 1, 'nico portrait', '/Galerie/1-test1/nico.jpg', '/Galerie_mini/1-test1/nico.jpg', 'N', '0000-00-00 00:00:00', 2, 2),
(4, 1, '', '/Galerie/1-test1/vs_01.jpg', '/Galerie_mini/1-test1/vs_01.jpg', 'N', '0000-00-00 00:00:00', 2, 2),
(5, 2, '', '/Galerie/2-2/vs_04.jpg', '/Galerie_mini/2-2/vs_04.jpg', 'Y', '0000-00-00 00:00:00', 1, 0),
(6, 1, '', '/Galerie/1-test1/vs_01.jpg', '/Galerie_mini/1-test1/vs_01.jpg', 'N', '0000-00-00 00:00:00', 2, 2),
(7, 3, '', '/Galerie/3-test/vs_05.jpg', '/Galerie_mini/3-test/vs_05.jpg', 'N', '0000-00-00 00:00:00', 1, 1),
(8, 2, '', '/Galerie/2-2/miniaturepardefault.JPG', '/Galerie_mini/2-2/miniaturepardefault.JPG', 'Y', '0000-00-00 00:00:00', 2, 0),
(9, 2, '', '/Galerie/2-2/Autobianchi_Bianchina_7259601.jpg', '/Galerie_mini/2-2/Autobianchi_Bianchina_7259601.jpg', 'Y', '0000-00-00 00:00:00', 3, 0);
--
-- Contraintes pour les tables exportées
--
--
-- Contraintes pour la table `galerie`
--
ALTER TABLE `galerie`
ADD CONSTRAINT `galerie_ibfk_1` FOREIGN KEY (`Reportage_Id`) REFERENCES `reportage` (`Id`) ON DELETE SET NULL ON UPDATE CASCADE;
--
-- Contraintes pour la table `photo`
--
ALTER TABLE `photo`
ADD CONSTRAINT `Photo_ibfk_1` FOREIGN KEY (`Galerie_Id`) REFERENCES `galerie` (`Id`) ON DELETE SET NULL ON UPDATE CASCADE;
ma requête
SELECT G.Id AS IdGalerie, ShortName, G.Audit_Current AS Audit_Current, P.Audit_Current AS Photo_Current, count( P.Galerie_Id ) AS Nb_Photo
FROM Galerie G
LEFT JOIN Photo P ON G.Id = P.Galerie_Id
GROUP BY G.Id, ShortName, G.Audit_Current, P.Audit_Current
LIMIT 0 , 30
le résultat que j'obtiens:
IdGalerie ShortName Audit_Current Photo_Current Nb_Photo
1 test1 Y Y 1
1 test1 Y N 4
2 2 Y Y 3
3 test N N 1
4 test Y NULL 0
est ce possible en 1 requête d'obtenir ces résultats:
1 test Y Y 1 N 4
2 2 Y Y 3 N 0
3 test N Y 0 N 1
4 test Y NULL 0 NULL 0
J'ai essaye ces 2 requetes en vain...
SELECT distinct
G.Id as IdGalerie, ShortName, G.Audit_Current as Audit_Current,P.Audit_Current as Photo_active, count(P.Audit_Current) as Nb_Photo, P2.Audit_Current as Photo_Desactive, count(P2.Audit_Current) as Nb_Photo_Desactive
FROM Galerie G LEFT JOIN Photo P ON G.Id=P.Galerie_Id AND P.Audit_Current='Y' left JOIN Photo P2 ON P.Audit_Current<>P2.Audit_Current_Id AND P2.Audit_Current='N'
Group By G.Id, ShortName, G.Audit_Current, P.Audit_Current, P2.Audit_Current
SELECT distinct
G.Id as IdGalerie, G.ShortName, G.Audit_Current as Audit_Current,P.Audit_Current as Photo_active, count(P.Audit_Current) as Nb_Photo, P2.Audit_Current as Photo_Desactive, count(P2.Audit_Current) as Nb_Photo_Desactive
FROM ( Galerie G LEFT JOIN Photo P ON G.Id=P.Galerie_Id AND P.Audit_Current='Y'), (Galerie G2 left JOIN Photo P2 ON G2.Id=P2.Galerie_Id AND P2.Audit_Current='N')
WHERE G.Id=G2.Id AND G.Audit_Current=G2.Audit_Current AND G.ShortName=G2.ShortName
Group By G.Id, G.ShortName, G.Audit_Current, P.Audit_Current, P2.Audit_Current
mes resultats:
IdGalerie ShortName Audit_Current Photo_active Nb_Photo Photo_Desactive Nb_Photo_Desactive
1 test1 Y Y 4 N 4
2 2 Y Y 3 NULL 0
3 test N NULL 0 N 1
4 test Y NULL 0 NULL 0
en gros faudrait que je fasse
(Galerie Left join Photo active) que je joins a (Galerie left join Photo desactive) mais je n'y suis pas arrivé...
bonjour,
voici les tables:
[sql]
--
-- Structure de la table `galerie`
--
CREATE TABLE IF NOT EXISTS `galerie` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`Reportage_Id` int(11) DEFAULT NULL,
`ShortName` varchar(25) NOT NULL,
`LongName` varchar(25) DEFAULT NULL,
`Date` datetime DEFAULT NULL,
`Lieu` varchar(50) DEFAULT 'Paris, France',
`Description` longtext,
`Audit_Current` enum('Y','N') NOT NULL DEFAULT 'Y',
`Audit_DateTime` datetime NOT NULL,
`Position` int(11) NOT NULL DEFAULT '1',
`Position_Origine` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`Id`),
KEY `Reportage_Id` (`Reportage_Id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
--
-- Contenu de la table `galerie`
--
INSERT INTO `galerie` (`Id`, `Reportage_Id`, `ShortName`, `LongName`, `Date`, `Lieu`, `Description`, `Audit_Current`, `Audit_DateTime`, `Position`, `Position_Origine`) VALUES
(1, 2, 'test1', 'Ceci est un test', '2010-04-05 00:00:00', 'Paris 8', 'test\n\ntesst\n\n<strong>test</strong>test\n\ntesst\n\n<strong>test</strong>test\n\ntesst\n\n<strong>test</strong>test\n\ntesst\n\n<strong>test</strong>', 'Y', '2010-04-05 18:45:08', 1, 0),
(2, 2, '2', '2', '0000-00-00 00:00:00', '', 'Un 2eme ajout de galerie', 'Y', '2010-04-05 18:48:58', 2, 0),
(3, 2, 'test', '', '0000-00-00 00:00:00', '', '<strong>dxvdf</strong>', 'N', '2010-04-05 19:30:04', 3, 0),
(4, 1, 'test', NULL, NULL, 'Paris, France', NULL, 'Y', '0000-00-00 00:00:00', 1, 0);
-- --------------------------------------------------------
--
-- Structure de la table `photo`
--
CREATE TABLE IF NOT EXISTS `photo` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`Galerie_Id` int(11) DEFAULT NULL,
`Commentaire` varchar(25) NOT NULL,
`Photo` varchar(125) DEFAULT NULL,
`Miniature` varchar(125) DEFAULT NULL,
`Audit_Current` enum('Y','N') DEFAULT 'Y',
`Audit_DateTime` datetime NOT NULL,
`Position` int(11) NOT NULL DEFAULT '1',
`Position_Origine` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`Id`),
KEY `Galerie_Id` (`Galerie_Id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ;
--
-- Contenu de la table `photo`
--
INSERT INTO `photo` (`Id`, `Galerie_Id`, `Commentaire`, `Photo`, `Miniature`, `Audit_Current`, `Audit_DateTime`, `Position`, `Position_Origine`) VALUES
(1, 1, 'photo1', '/Galerie/1-test1/mn_01.jpg', '/Galerie_mini/1-test1/mn_01.jpg', 'Y', '0000-00-00 00:00:00', 1, 0),
(2, 1, 'phot2', '/Galerie/1-test1/vs_03.jpg', '/Galerie_mini/1-test1/vs_03.jpg', 'N', '0000-00-00 00:00:00', 2, 2),
(3, 1, 'nico portrait', '/Galerie/1-test1/nico.jpg', '/Galerie_mini/1-test1/nico.jpg', 'N', '0000-00-00 00:00:00', 2, 2),
(4, 1, '', '/Galerie/1-test1/vs_01.jpg', '/Galerie_mini/1-test1/vs_01.jpg', 'N', '0000-00-00 00:00:00', 2, 2),
(5, 2, '', '/Galerie/2-2/vs_04.jpg', '/Galerie_mini/2-2/vs_04.jpg', 'Y', '0000-00-00 00:00:00', 1, 0),
(6, 1, '', '/Galerie/1-test1/vs_01.jpg', '/Galerie_mini/1-test1/vs_01.jpg', 'N', '0000-00-00 00:00:00', 2, 2),
(7, 3, '', '/Galerie/3-test/vs_05.jpg', '/Galerie_mini/3-test/vs_05.jpg', 'N', '0000-00-00 00:00:00', 1, 1),
(8, 2, '', '/Galerie/2-2/miniaturepardefault.JPG', '/Galerie_mini/2-2/miniaturepardefault.JPG', 'Y', '0000-00-00 00:00:00', 2, 0),
(9, 2, '', '/Galerie/2-2/Autobianchi_Bianchina_7259601.jpg', '/Galerie_mini/2-2/Autobianchi_Bianchina_7259601.jpg', 'Y', '0000-00-00 00:00:00', 3, 0);
--
-- Contraintes pour les tables exportées
--
--
-- Contraintes pour la table `galerie`
--
ALTER TABLE `galerie`
ADD CONSTRAINT `galerie_ibfk_1` FOREIGN KEY (`Reportage_Id`) REFERENCES `reportage` (`Id`) ON DELETE SET NULL ON UPDATE CASCADE;
--
-- Contraintes pour la table `photo`
--
ALTER TABLE `photo`
ADD CONSTRAINT `Photo_ibfk_1` FOREIGN KEY (`Galerie_Id`) REFERENCES `galerie` (`Id`) ON DELETE SET NULL ON UPDATE CASCADE;
[/sql]
ma requête
[sql]
SELECT G.Id AS IdGalerie, ShortName, G.Audit_Current AS Audit_Current, P.Audit_Current AS Photo_Current, count( P.Galerie_Id ) AS Nb_Photo
FROM Galerie G
LEFT JOIN Photo P ON G.Id = P.Galerie_Id
GROUP BY G.Id, ShortName, G.Audit_Current, P.Audit_Current
LIMIT 0 , 30
[/sql]
le résultat que j'obtiens:
IdGalerie ShortName Audit_Current Photo_Current Nb_Photo
1 test1 Y Y 1
1 test1 Y N 4
2 2 Y Y 3
3 test N N 1
4 test Y NULL 0
est ce possible en 1 requête d'obtenir ces résultats:
1 test Y Y 1 N 4
2 2 Y Y 3 N 0
3 test N Y 0 N 1
4 test Y NULL 0 NULL 0
J'ai essaye ces 2 requetes en vain...
[sql]
SELECT distinct
G.Id as IdGalerie, ShortName, G.Audit_Current as Audit_Current,P.Audit_Current as Photo_active, count(P.Audit_Current) as Nb_Photo, P2.Audit_Current as Photo_Desactive, count(P2.Audit_Current) as Nb_Photo_Desactive
FROM Galerie G LEFT JOIN Photo P ON G.Id=P.Galerie_Id AND P.Audit_Current='Y' left JOIN Photo P2 ON P.Audit_Current<>P2.Audit_Current_Id AND P2.Audit_Current='N'
Group By G.Id, ShortName, G.Audit_Current, P.Audit_Current, P2.Audit_Current
[/sql]
[sql]
SELECT distinct
G.Id as IdGalerie, G.ShortName, G.Audit_Current as Audit_Current,P.Audit_Current as Photo_active, count(P.Audit_Current) as Nb_Photo, P2.Audit_Current as Photo_Desactive, count(P2.Audit_Current) as Nb_Photo_Desactive
FROM ( Galerie G LEFT JOIN Photo P ON G.Id=P.Galerie_Id AND P.Audit_Current='Y'), (Galerie G2 left JOIN Photo P2 ON G2.Id=P2.Galerie_Id AND P2.Audit_Current='N')
WHERE G.Id=G2.Id AND G.Audit_Current=G2.Audit_Current AND G.ShortName=G2.ShortName
Group By G.Id, G.ShortName, G.Audit_Current, P.Audit_Current, P2.Audit_Current
[/sql]
mes resultats:
IdGalerie ShortName Audit_Current Photo_active Nb_Photo Photo_Desactive Nb_Photo_Desactive
1 test1 Y Y 4 N 4
2 2 Y Y 3 NULL 0
3 test N NULL 0 N 1
4 test Y NULL 0 NULL 0
en gros faudrait que je fasse
(Galerie Left join Photo active) que je joins a (Galerie left join Photo desactive) mais je n'y suis pas arrivé...