Bonjour à tous,
Je suis actuellement en stage informatique et on me demande de faire un certains nombres de requête afin d'afficher les résultats de transfert de fichier. Le problème est que pour un affichage, j'ai besoin de trois requètes et j'aimerais n'en faire que une, si bien sûr cela est possible. Je travail sur une base Oracle. Dont voici la table. (tout les nom son fictif, mais le principe reste le même)

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
 
-- 
-- Serveur: localhost
-- Généré le : Dimanche 10 Juin 2007 à 12:48
-- Version du serveur: 4.1.9
-- Version de PHP: 4.3.10
-- 
-- Base de données: `mabase`
-- 
 
-- --------------------------------------------------------
 
-- 
-- Structure de la table `matable`
-- 
 
CREATE TABLE `matable` (
  `idtransfert` int(11) NOT NULL auto_increment,
  `date` date NOT NULL default '0000-00-00',
  `statut` int(1) NOT NULL default '0',
  `nomfichier` varchar(60) NOT NULL default '',
  `typefichier` varchar(20) NOT NULL default '',
  PRIMARY KEY  (`idtransfert`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=70 ;
 
-- 
-- Contenu de la table `matable`
-- 
 
INSERT INTO `matable` VALUES (15, '2007-11-05', 0, 'rapport_compta', '.txt');
INSERT INTO `matable` VALUES (5, '2007-06-01', 1, 'dossier_entr.', '.txt');
INSERT INTO `matable` VALUES (2, '2007-02-03', 1, 'mémoire', '.doc');
INSERT INTO `matable` VALUES (3, '2007-03-10', 1, 'logo1', '.gif');
INSERT INTO `matable` VALUES (6, '2007-06-01', 1, 'administration', '.doc');
INSERT INTO `matable` VALUES (7, '2007-06-02', 0, 'graphique', '.gif');
INSERT INTO `matable` VALUES (8, '2007-06-06', 0, 'rapport_stage', '.doc');
INSERT INTO `matable` VALUES (13, '2007-08-15', 0, 'reglement', '.txt');
INSERT INTO `matable` VALUES (12, '2007-06-24', 1, 'bannière', '.gif');
INSERT INTO `matable` VALUES (11, '2007-06-15', 1, 'note1', '.txt');
INSERT INTO `matable` VALUES (14, '2007-10-30', 0, 'note2', '.txt');
INSERT INTO `matable` VALUES (10, '2007-06-14', 1, 'rapport', '.doc');
INSERT INTO `matable` VALUES (9, '2007-06-07', 0, 'resultat_concour', '.txt');
INSERT INTO `matable` VALUES (4, '2007-05-21', 0, 'feuille_salaire', '.txt');
INSERT INTO `matable` VALUES (1, '2007-01-11', 0, 'facture', '.pdf');
Résultat d'un :
Pour le statut, zéro signifie que le transfert est réussi (OK), le 1 signifie qu'il a échoué (KO).

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
 
idtransfert	date		statut	nomfichier		typefichier
15 		2007-11-05 	0 	rapport_compta 		.txt
5 		2007-06-01 	1 	dossier_entr. 		.txt
2 		2007-02-03 	1 	mémoire 		.doc
3 		2007-03-10 	1 	logo1 			.gif
6 		2007-06-01 	1 	administration 		.doc
7 		2007-06-02 	0 	graphique 		.gif
8 		2007-06-06 	0 	rapport_stage 		.doc
13 		2007-08-15 	0 	reglement 		.txt
12 		2007-06-24 	1 	bannière 		.gif
11 		2007-06-15 	1 	note1 			.txt
14 		2007-10-30 	0 	note2 			.txt
10 		2007-06-14 	1 	rapport 		.doc
9 		2007-06-07 	0 	resultat_concour 	.txt
4 		2007-05-21 	0 	feuille_salaire 	.txt
1 		2007-01-11 	0 	facture 		.pdf



Ce que je voudrais, c'est avoir un tableau ou nous verrions le dernier fichier de chaque typefichier, le nombre de fichier tranféré et le nombre de fichier KO.
exemple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
-------------------------------------------------------------------------|
   date   |        nomfichier    | typefichier  | Nb_fichier |  nb_erreur|
-------------------------------------------------------------------------|
2007-11-05|    rapport_compta    |   .txt       |     7      |     2     |
-------------------------------------------------------------------------|
2007-06-14|    rapport           |   .doc       |     4      |     3     |
-------------------------------------------------------------------------|
2007-06-24|    bannière          |   .gif       |     3      |     2     |
-------------------------------------------------------------------------|
2007-01-11|    facture           |   .pdf       |     1      |     0     |
-------------------------------------------------------------------------|
Pour l'instant je n'ai réussi qu'en faisant 3 tableaux différents, en faisant trois requêtes :
Une pour les derniers fichier, une autre pour le nommbre de fichier par typefichier et une troisième pour le nombre de fichier KO.

J'aimerais savoir si il ne serait pas possible de pouvoir réduire le nombre de requête. Je ne sais pas du tout si cela est possible. Cela me parait compliquer


Voila ce que j'ai fait:

-requête pour le dernier fichier par type de fichier:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
SELECT 	idtransfert, Statut, date, nomfichier, typefichier
FROM 	MaTable
WHERE 	idtransfert IN 
 
	(SELECT MAX(idtransfert)
	FROM MaTable
	GROUP BY (typefichier))
Résultat:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
-------------------------------------------------
   date   |        nomfichier    | typefichier  |
-------------------------------------------------
2007-11-05|    rapport_compta    |   .txt       |
-------------------------------------------------
2007-06-14|    rapport           |   .doc       |
-------------------------------------------------
2007-06-24|    bannière          |   .gif       |
-------------------------------------------------
2007-01-11|    facture           |   .pdf       |
-------------------------------------------------
-requête pour afficher la deuxième partie, le nombre de fichier par type de fichier:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
SELECT COUNT(*) AS Nb_fichier, typefichier
FROM MaTable
GROUP BY (typefichier)
résultat :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
---------------------------|
 typefichier  | Nb_fichier |
---------------------------|
   .txt       |     7      |    
---------------------------|
   .doc       |     4      |    
---------------------------|
   .gif       |     3      |     
---------------------------|
   .pdf       |     1      |     
---------------------------|
-requête pour afficher la troisième partie, le nombre de fichier KO par type de fichier:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
SELECT COUNT(*) AS Nb_fichier, typefichier
FROM MaTable
WHERE statut=1
GROUP BY (typefichier)
résultat :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
---------------------------|
 typefichier  | nb_erreur  |
---------------------------|
   .txt       |     2      |    
---------------------------|
   .doc       |     3      |    
---------------------------|
   .gif       |     2      |     
---------------------------|
!! De plus ici le type .pdf qui n'a acun fichier KO n'apparait pas, alors que je me doit de le faire apparaitre. :s

Donc voila je voulais savoir si vous pouviez m'aider à réduire le nombre de requête.En esperant vous avoir donné les informations qu'il fallait tout en étant clair.

Je vous remercie d'avance.

Cordialement,