affichage d'éléments n'ont présents dans la BdD principale

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : affichage d'éléments n'ont présents dans la BdD principale

par FAbrice » 18 nov. 2005, 09:27

je viens de tester la synthaxe est g le regert de vous dire que





ca marche a merveille :lol:

merci beaucoup de votre aide,
FAb, qui va maintenant passer passer un bon WE! (du moins, s'il n'y a pas un nouveau pb a résoudre :wink: )

par sadeq » 17 nov. 2005, 16:02

J'ai regardé tes tables et compris les fonctionnement de ta base et de ta requête et je vais te proposer une solution :

Tu veux afficher la description (ce que tu appelles "Detalis") de tous les éléments enregistrés et au cas où un élément a subi une expertise : la description du défaut et le nombre de fois qu'il est constaté

En plus, cette requête doit concerner en fait seulement le défaut de type 2 (c'est à dire les éléments cassés)

Hé bien répondons petit à petit à cette requête.
1.Voici d'abord la liste des descriptions des éléments enregistrés :

Code : Tout sélectionner

SELECT elements.Details as élément FROM elements
2.Voici la liste des éléments qui ont subi une expertise :

Code : Tout sélectionner

SELECT elements.Details as élément FROM elements JOIN expertise ON elements.ID=expertise.Element
3. Enrichir la liste 2 en précisant la description du défaut constaté par l'expertise (cette description se trouve dans la table defaut qu'il faut lier alors à expertise):

Code : Tout sélectionner

SELECT elements.Details as élément, defaut.Description as défaut FROM elements JOIN (expertise JOIN defaut ON expertise.Defaut = defaut.ID) ON elements.ID=expertise.Element
NB: La formulation des jointures dans la clause FROM respecte un ordre précis de liaison entre les tables impliquées. ici on peut lire ces jointure comme suit :
"La table éléments est liée à la table expertise qui est elle même liée à la table defaut."

4. Inclure aussi dans la liste 3 les éléments qui n'ont pas subi d'expertise (il faut utiliser une jointure externe à gauche entre la table elements et expertise tout en concervant intact le lien entre cette dernière et la table defaut) :

Code : Tout sélectionner

SELECT elements.Details as élément, defaut.Description as défaut FROM elements LEFT OUTER JOIN (expertise JOIN defaut ON expertise.Defaut = defaut.ID) ON elements.ID=expertise.Element
5. Restreindre la liste 4 aux éléments ayant subi un défaut de type 2 (élément Cassé) et à ceux non expertisés pour respecter l'étape 4 (en effet, si on limite la liste seulement aux défauts de types 2, les éléments non expertisés ne seront plus pris en compte vu qu'ils n'ont pas de défaut du tout. Pour palier à ce problème, il faut accepter aussi les défauts nuls) :

Code : Tout sélectionner

SELECT elements.Details as élément, defaut.Description as défaut FROM elements LEFT OUTER JOIN (expertise JOIN defaut ON expertise.Defaut = defaut.ID) ON elements.ID=expertise.Element WHERE defaut.id = 2 or defaut.id is null
6. Compter le nombre de fois un même défaut est constaté pour le même élément (il faut utiliser un COUNT(defaut.id) qui compte les défauts en regrouppant les éléments par déscription) :

Code : Tout sélectionner

SELECT elements.Details as élément, defaut.Description as défaut, count(defaut.iD) as nombre FROM elements LEFT OUTER JOIN (expertise JOIN defaut ON expertise.Defaut = defaut.ID) on elements.ID=expertise.Element WHERE defaut.id = 2 or defaut.id is null GROUP BY elements.Details, defaut.Description
7. et enfin ajouter un classement des déscriptions des éléments par ordre croissant (un ORDER BY):

Code : Tout sélectionner

SELECT elements.Details as élément, defaut.Description as défaut, count(defaut.iD) as nombre FROM elements LEFT OUTER JOIN (expertise JOIN defaut ON expertise.Defaut = defaut.ID) on elements.ID=expertise.Element WHERE defaut.id = 2 or defaut.id is null GROUP BY elements.Details, defaut.Description ORDER BY elements.Details
Et voilà ta requête en 7 étapes expliquées.

Pratique :
cette requête t'affiche normalement le résultat suivant selon ta base de données :
  • élément défaut nombre
    --------------------------------------------------
    - Choisissez un élément - NULL 0
    accouplement NULL 0
    Arcade NULL 0
    bati Cassé 1
    Bielle NULL 0
    Boite de refroidissement NULL 0
    boites à rlts NULL 0
    Boitier à GM NULL 0
    Canon NULL 0
    Coussinet NULL 0
    Couvercle de palier NULL 0
    Ecrous de roue NULL 0
    Flasque NULL 0
    Fourreau de pe NULL 0
    Garniture mecanique Cassé 6
    Goujons NULL 0
    JOINT EAU AR NULL 0
    Joint eau canon NULL 0
    Joint eau volute NULL 0
    Palier NULL 0
    Pompe Complette HS NULL 0
    Presse étoupe Cassé 1
    Rotor NULL 0
    Soufflet NULL 0
    Stator NULL 0
    Tube arrosge GM NULL 0
    Tube de liaison NULL 0
    Tube de sortie NULL

par FAbrice » 17 nov. 2005, 08:45

Bonjour,

G essayer d'adapter vos exemples a mon cas mais je crois que le fait de faire appel a plusieres tables génerent un pb! :oops:

Voici comment je procede:
table elements----\
...........................---> table expertise
table defauts------/

en fait, je cherche a compter, par elements, le nombre de fois qu'ils apparaissent dans la base mais en spécifiant le défaut (par expertise.defaut = 2 par exemple, dans ce cas, je compte le nombre de fois que g chaque element pour le defaut 2 qui est cassé))

Je me permets de fournir les tables (c pê + simple pour vous pour mieux comprendre)

TABLE DEFAUT:
# phpMyAdmin SQL Dump
# version 2.5.3
# http://www.phpmyadmin.net
#
# Serveur: localhost
# Généré le : Jeudi 17 Novembre 2005 à 07:33
# Version du serveur: 4.0.15
# Version de PHP: 4.3.3
#
# Base de données: `ateliermeca`
#

# --------------------------------------------------------

#
# Structure de la table `defaut`
#

CREATE TABLE `defaut` (
`ID` mediumint(3) NOT NULL auto_increment,
`Description` text NOT NULL,
`Heure` datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (`ID`)
) TYPE=MyISAM AUTO_INCREMENT=41 ;

#
# Contenu de la table `defaut`
#

INSERT INTO `defaut` VALUES (1, '- Choisissez un défaut -', '0000-00-00 00:00:00');
INSERT INTO `defaut` VALUES (2, 'Cassé', '0000-00-00 00:00:00');
INSERT INTO `defaut` VALUES (3, 'Rouillé', '0000-00-00 00:00:00');
INSERT INTO `defaut` VALUES (4, 'Tordu', '0000-00-00 00:00:00');
INSERT INTO `defaut` VALUES (5, 'Voilé', '0000-00-00 00:00:00');
INSERT INTO `defaut` VALUES (17, 'Abimé', '2005-02-23 09:25:31');
INSERT INTO `defaut` VALUES (16, 'HS', '2005-02-23 09:25:07');
INSERT INTO `defaut` VALUES (15, 'Vrillé', '2005-02-10 11:38:21');
INSERT INTO `defaut` VALUES (18, 'Grippé', '2005-02-23 14:54:23');
INSERT INTO `defaut` VALUES (19, 'Indémontable', '2005-02-23 14:57:00');
INSERT INTO `defaut` VALUES (20, 'Rayé', '2005-03-22 11:40:51');
INSERT INTO `defaut` VALUES (21, 'Usé', '2005-04-07 15:12:30');
INSERT INTO `defaut` VALUES (22, 'Encrassé', '2005-04-11 08:19:44');
INSERT INTO `defaut` VALUES (23, 'Corodé', '2005-04-28 14:43:37');
INSERT INTO `defaut` VALUES (24, 'Jeu important', '2005-04-28 15:44:05');
INSERT INTO `defaut` VALUES (25, 'Piqué', '2005-04-28 16:26:44');
INSERT INTO `defaut` VALUES (26, 'FUITE GM QUAND LA POMPE TOURNE ', '2005-06-17 15:11:47');
INSERT INTO `defaut` VALUES (27, 'FUITE GM QUAND LA POMPE TOURNE ', '2005-06-17 15:11:47');
INSERT INTO `defaut` VALUES (28, 'Fuite à la GM quand la pompe tourne ', '2005-06-17 15:13:58');
INSERT INTO `defaut` VALUES (29, 'Fuite à la GM quand la pompe tourne ', '2005-06-17 15:14:41');
INSERT INTO `defaut` VALUES (30, 'Leger jeu rlt', '2005-07-04 16:19:21');
INSERT INTO `defaut` VALUES (31, 'Faire modif pour reglage ppe ', '2005-07-04 16:20:56');
INSERT INTO `defaut` VALUES (32, 'joint flasque arrière HS', '2005-07-19 16:13:19');
INSERT INTO `defaut` VALUES (33, 'Laminé par le produit', '2005-07-22 12:01:34');
INSERT INTO `defaut` VALUES (34, 'Entartré', '2005-08-01 08:20:03');
INSERT INTO `defaut` VALUES (35, 'jeu joint eau important', '2005-08-03 09:14:41');
INSERT INTO `defaut` VALUES (36, 'Fendue', '2005-08-09 11:45:46');
INSERT INTO `defaut` VALUES (37, 'Bruillante', '2005-10-04 16:18:18');
INSERT INTO `defaut` VALUES (38, 'Percé', '2005-10-05 11:53:16');
INSERT INTO `defaut` VALUES (39, ' Defaut Orientation ', '2005-10-05 14:34:23');
INSERT INTO `defaut` VALUES (40, 'Fuite d huile', '2005-11-02 11:43:42');
TABLE ELEMENTS:
# phpMyAdmin SQL Dump
# version 2.5.3
# http://www.phpmyadmin.net
#
# Serveur: localhost
# Généré le : Jeudi 17 Novembre 2005 à 07:32
# Version du serveur: 4.0.15
# Version de PHP: 4.3.3
#
# Base de données: `ateliermeca`
#

# --------------------------------------------------------

#
# Structure de la table `elements`
#

CREATE TABLE `elements` (
`ID` mediumint(4) NOT NULL auto_increment,
`Details` text NOT NULL,
`Heure` datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (`ID`)
) TYPE=MyISAM AUTO_INCREMENT=50 ;

#
# Contenu de la table `elements`
#

INSERT INTO `elements` VALUES (1, '- Choisissez un élément -', '0000-00-00 00:00:00');
INSERT INTO `elements` VALUES (2, 'Arbre', '0000-00-00 00:00:00');
INSERT INTO `elements` VALUES (3, 'Clavette', '0000-00-00 00:00:00');
INSERT INTO `elements` VALUES (4, 'Roue', '2005-02-09 07:55:07');
INSERT INTO `elements` VALUES (5, 'Garniture mecanique', '2005-02-23 09:26:00');
INSERT INTO `elements` VALUES (6, 'Bourrage', '2005-02-23 09:26:14');
INSERT INTO `elements` VALUES (7, 'Roulements', '2005-02-23 09:26:40');
INSERT INTO `elements` VALUES (8, 'JOINT EAU AV', '2005-02-23 10:20:44');
INSERT INTO `elements` VALUES (9, 'JOINT EAU AR ', '2005-02-23 10:21:04');
INSERT INTO `elements` VALUES (10, 'Chemise', '2005-02-23 14:52:42');
INSERT INTO `elements` VALUES (11, 'Ensemble corps,roue,flasque ', '2005-02-23 14:55:39');
INSERT INTO `elements` VALUES (12, 'Ensemble mecanique', '2005-02-23 14:56:14');
INSERT INTO `elements` VALUES (13, 'Bride de ref', '2005-03-07 09:59:34');
INSERT INTO `elements` VALUES (14, 'Bride entré', '2005-03-07 09:59:59');
INSERT INTO `elements` VALUES (15, 'Volute ', '2005-03-07 10:00:47');
INSERT INTO `elements` VALUES (16, 'Flasque AR', '2005-03-07 10:01:07');
INSERT INTO `elements` VALUES (17, 'Porte grain ', '2005-03-07 10:01:47');
INSERT INTO `elements` VALUES (18, 'Logement joint bague levre', '2005-03-21 11:40:51');
INSERT INTO `elements` VALUES (19, 'Flasque AV', '2005-03-21 11:41:53');
INSERT INTO `elements` VALUES (20, 'Corps', '2005-03-21 11:42:59');
INSERT INTO `elements` VALUES (21, 'bati', '2005-04-04 10:55:50');
INSERT INTO `elements` VALUES (22, 'Presse étoupe', '2005-04-07 10:37:19');
INSERT INTO `elements` VALUES (23, 'Lanterne', '2005-04-07 10:37:29');
INSERT INTO `elements` VALUES (24, 'Logement du bourrage', '2005-04-07 10:41:30');
INSERT INTO `elements` VALUES (25, 'Doigts acc', '2005-04-07 11:43:36');
INSERT INTO `elements` VALUES (26, 'clapet asp ou ref', '2005-04-07 15:12:50');
INSERT INTO `elements` VALUES (27, 'Palier', '2005-04-07 15:47:33');
INSERT INTO `elements` VALUES (28, 'Flasque', '2005-04-15 11:45:16');
INSERT INTO `elements` VALUES (29, 'Goujons', '2005-05-09 13:31:03');
INSERT INTO `elements` VALUES (30, 'Boitier à GM', '2005-05-12 14:51:40');
INSERT INTO `elements` VALUES (31, 'Ecrous de roue ', '2005-05-12 15:43:01');
INSERT INTO `elements` VALUES (32, 'Couvercle de palier ', '2005-05-26 14:05:31');
INSERT INTO `elements` VALUES (33, 'Coussinet ', '2005-05-26 14:06:42');
INSERT INTO `elements` VALUES (34, 'Tube de liaison ', '2005-06-14 10:28:26');
INSERT INTO `elements` VALUES (35, 'Arcade ', '2005-06-14 11:40:08');
INSERT INTO `elements` VALUES (36, 'Boite de refroidissement', '2005-06-16 14:07:15');
INSERT INTO `elements` VALUES (37, 'accouplement', '2005-06-17 16:09:36');
INSERT INTO `elements` VALUES (38, 'Stator', '2005-06-22 15:23:13');
INSERT INTO `elements` VALUES (39, 'Rotor', '2005-06-22 15:23:25');
INSERT INTO `elements` VALUES (40, 'Soufflet', '2005-06-22 15:23:42');
INSERT INTO `elements` VALUES (41, 'Bielle', '2005-07-19 09:59:43');
INSERT INTO `elements` VALUES (42, 'Canon', '2005-08-03 09:14:07');
INSERT INTO `elements` VALUES (43, 'boites à rlts', '2005-08-26 13:55:55');
INSERT INTO `elements` VALUES (44, 'Fourreau de pe ', '2005-08-31 13:38:28');
INSERT INTO `elements` VALUES (45, 'Joint eau volute', '2005-09-15 07:49:43');
INSERT INTO `elements` VALUES (46, 'Joint eau canon', '2005-09-15 07:50:03');
INSERT INTO `elements` VALUES (47, 'Tube de sortie ', '2005-09-15 07:53:25');
INSERT INTO `elements` VALUES (48, 'Pompe Complette HS', '2005-09-19 14:54:41');
INSERT INTO `elements` VALUES (49, 'Tube arrosge GM ', '2005-10-10 11:38:16');
TABLE EXPERTISE:
# phpMyAdmin SQL Dump
# version 2.5.3
# http://www.phpmyadmin.net
#
# Serveur: localhost
# Généré le : Jeudi 17 Novembre 2005 à 07:33
# Version du serveur: 4.0.15
# Version de PHP: 4.3.3
#
# Base de données: `ateliermeca`
#

# --------------------------------------------------------

#
# Structure de la table `expertise`
#

CREATE TABLE `expertise` (
`ID` bigint(5) NOT NULL auto_increment,
`Numdossier` varchar(10) NOT NULL default '',
`Element` text NOT NULL,
`Defaut` text NOT NULL,
`Commentaire` text NOT NULL,
`Heure` datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (`ID`)
) TYPE=MyISAM AUTO_INCREMENT=754 ;

#
# Contenu de la table `expertise`
#

INSERT INTO `expertise` VALUES (28, '48', '13', '17', '/', '2005-03-07 10:04:13');
INSERT INTO `expertise` VALUES (27, '48', '16', '17', 'grippe sur la chemise', '2005-03-07 10:03:46');
INSERT INTO `expertise` VALUES (26, '48', '2', '17', '/', '2005-03-07 10:02:50');
INSERT INTO `expertise` VALUES (25, '48', '5', '16', 'GM double', '2005-03-07 09:57:32');
INSERT INTO `expertise` VALUES (24, '49', '10', '17', 'toilage de la chemise', '2005-02-23 14:59:50');
INSERT INTO `expertise` VALUES (23, '49', '11', '18', 'démontage difficile', '2005-02-23 14:58:28');
INSERT INTO `expertise` VALUES (22, '49', '5', '17', 'RODAGE ATM', '2005-02-23 14:50:31');
INSERT INTO `expertise` VALUES (21, '45', '5', '16', 'APRES RODAGE GM HS', '2005-02-23 14:43:37');
INSERT INTO `expertise` VALUES (20, '45', '5', '17', '/', '2005-02-23 09:29:06');
INSERT INTO `expertise` VALUES (30, '58', '8', '16', 'USURE IMPORTANTE JEU + 3mm', '2005-03-21 11:33:54');
INSERT INTO `expertise` VALUES (29, '58', '14', '17', '/', '2005-03-21 11:32:13');
INSERT INTO `expertise` VALUES (31, '58', '5', '2', '/', '2005-03-21 11:34:27');
INSERT INTO `expertise` VALUES (32, '58', '10', '17', 'rayé par la GM (toilage)', '2005-03-21 11:36:00');
INSERT INTO `expertise` VALUES (33, '52', '12', '16', 'rlts hs', '2005-03-21 11:37:32');
INSERT INTO `expertise` VALUES (34, '52', '18', '17', 'Alesage trop important de la bague levre', '2005-03-21 11:48:25');
INSERT INTO `expertise` VALUES (35, '51', '4', '17', 'Trace de frotement sur les coprs', '2005-03-21 11:50:44');
INSERT INTO `expertise` VALUES (36, '51', '6', '16', '/', '2005-03-21 11:51:13');
INSERT INTO `expertise` VALUES (37, '51', '20', '17', 'Corps rayé du au frotement contre les roues', '2005-03-21 11:52:42');
INSERT INTO `expertise` VALUES (38, '51', '11', '3', 'Sablage', '2005-03-21 11:54:08');
INSERT INTO `expertise` VALUES (39, '53', '14', '17', '/', '2005-03-21 13:45:09');
INSERT INTO `expertise` VALUES (40, '53', '2', '16', 'Rouillé + corrosion importante', '2005-03-21 14:14:56');
INSERT INTO `expertise` VALUES (41, '53', '5', '2', '/', '2005-03-21 14:15:56');
INSERT INTO `expertise` VALUES (42, '53', '17', '17', 'portée de joint et fond piqué', '2005-03-21 14:17:34');
INSERT INTO `expertise` VALUES (43, '52', '5', '16', 'Usure importante au niveau du joint torique', '2005-03-21 15:18:00');
INSERT INTO `expertise` VALUES (44, '50', '6', '16', '/', '2005-03-22 11:39:37');
INSERT INTO `expertise` VALUES (45, '50', '10', '20', 'toilage de la chemise', '2005-03-22 11:41:36');
INSERT INTO `expertise` VALUES (46, '55', '2', '16', '/', '2005-03-22 11:49:51');
INSERT INTO `expertise` VALUES (47, '55', '10', '20', 'reprise au tour', '2005-03-22 11:53:42');
INSERT INTO `expertise` VALUES (48, '55', '12', '16', '/', '2005-03-22 11:54:02');
INSERT INTO `expertise` VALUES (49, '55', '5', '16', '/', '2005-03-22 11:54:20');
INSERT INTO `expertise` VALUES (50, '54', '10', '16', '/', '2005-03-22 11:58:03');
INSERT INTO `expertise` VALUES (51, '54', '12', '16', '/', '2005-03-22 11:58:32');
INSERT INTO `expertise` VALUES (52, '54', '5', '16', '/', '2005-03-22 11:58:52');
INSERT INTO `expertise` VALUES (53, '56', '5', '2', '/', '2005-03-23 16:33:44');
INSERT INTO `expertise` VALUES (54, '56', '10', '17', 'abimé sous le joint de la GM', '2005-03-23 16:34:29');
INSERT INTO `expertise` VALUES (55, '56', '7', '16', 'bruiyant + jeu important', '2005-03-23 16:35:26');
INSERT INTO `expertise` VALUES (56, '59', '5', '16', 'Cassé', '2005-03-29 15:18:39');
INSERT INTO `expertise` VALUES (57, '66', '5', '2', '/', '2005-04-01 14:28:05');
INSERT INTO `expertise` VALUES (58, '66', '3', '3', 'usure importante trop de jeu', '2005-04-01 14:28:48');
INSERT INTO `expertise` VALUES (59, '66', '2', '3', 'usé par la corosion', '2005-04-01 14:30:09');
INSERT INTO `expertise` VALUES (60, '66', '4', '5', '/', '2005-04-01 14:30:25');
INSERT INTO `expertise` VALUES (61, '66', '16', '5', '/', '2005-04-01 14:30:53');
INSERT INTO `expertise` VALUES (62, '66', '10', '3', '/rongé par la rouille', '2005-04-01 14:31:31');
INSERT INTO `expertise` VALUES (63, '66', '18', '3', 'trop de jeu', '2005-04-01 14:33:03');
INSERT INTO `expertise` VALUES (64, '66', '11', '18', 'demontage tres difficile grippé et rouillé', '2005-04-01 14:33:58');
INSERT INTO `expertise` VALUES (65, '66', '17', '20', 'rayé au niveau du joint', '2005-04-01 14:34:54');
INSERT INTO `expertise` VALUES (66, '69', '5', '20', 'usure trop importante pour rodage', '2005-04-01 14:48:11');
INSERT INTO `expertise` VALUES (67, '69', '12', '16', 'jeu important au roulement', '2005-04-01 14:51:18');
INSERT INTO `expertise` VALUES (68, '69', '10', '20', 'toilage', '2005-04-01 14:52:21');
INSERT INTO `expertise` VALUES (69, '69', '2', '20', 'toilage', '2005-04-01 14:52:44');
INSERT INTO `expertise` VALUES (70, '67', '10', '20', 'toilage', '2005-04-01 15:04:46');
INSERT INTO `expertise` VALUES (71, '67', '5', '17', 'usure importante + joint de GM detruit', '2005-04-01 15:33:43');
INSERT INTO `expertise` VALUES (72, '67', '5', '17', 'usure importante + joint de GM detruit', '2005-04-01 15:33:43');
INSERT INTO `expertise` VALUES (73, '65', '3', '16', '/', '2005-04-04 10:52:25');
INSERT INTO `expertise` VALUES (74, '65', '7', '16', '/', '2005-04-04 10:52:46');
INSERT INTO `expertise` VALUES (75, '65', '16', '16', '/', '2005-04-04 10:53:17');
INSERT INTO `expertise` VALUES (76, '65', '19', '16', '/', '2005-04-04 10:53:34');
INSERT INTO `expertise` VALUES (77, '65', '4', '17', '/', '2005-04-04 10:53:48');
INSERT INTO `expertise` VALUES (78, '65', '2', '16', '/', '2005-04-04 10:54:03');
INSERT INTO `expertise` VALUES (79, '65', '21', '2', '/', '2005-04-04 10:56:17');
INSERT INTO `expertise` VALUES (80, '70', '10', '3', 'CORROSION/', '2005-04-07 09:17:40');
INSERT INTO `expertise` VALUES (81, '70', '3', '16', '/', '2005-04-07 09:17:59');
INSERT INTO `expertise` VALUES (82, '70', '6', '16', '/', '2005-04-07 10:33:12');
INSERT INTO `expertise` VALUES (83, '70', '7', '16', '/', '2005-04-07 10:33:41');
INSERT INTO `expertise` VALUES (84, '70', '4', '5', '/', '2005-04-07 10:34:05');
INSERT INTO `expertise` VALUES (85, '70', '16', '3', 'GRIPPE SUSURE IMPORTANTE', '2005-04-07 10:34:49');
INSERT INTO `expertise` VALUES (86, '70', '15', '3', '/SABALAGE TRES DIFFICILE', '2005-04-07 10:35:34');
INSERT INTO `expertise` VALUES (87, '70', '22', '2', '/', '2005-04-07 10:39:15');
INSERT INTO `expertise` VALUES (88, '70', '23', '16', '/usé trop de jeu', '2005-04-07 10:40:02');
INSERT INTO `expertise` VALUES (89, '70', '24', '3', '/corrosion tres importante', '2005-04-07 10:43:35');
INSERT INTO `expertise` VALUES (90, '74', '5', '17', '/Rongé par le produit', '2005-04-07 11:42:15');
INSERT INTO `expertise` VALUES (91, '74', '10', '20', '/toilage de la chemise', '2005-04-07 11:42:42');
INSERT INTO `expertise` VALUES (92, '74', '25', '16', '/', '2005-04-07 11:43:51');
INSERT INTO `expertise` VALUES (93, '77', '5', '2', '/', '2005-04-07 14:58:41');
INSERT INTO `expertise` VALUES (94, '77', '11', '18', '/', '2005-04-07 14:59:04');
INSERT INTO `expertise` VALUES (95, '77', '16', '17', '/', '2005-04-07 15:05:09');
INSERT INTO `expertise` VALUES (96, '61', '5', '2', '/', '2005-04-07 15:06:56');
INSERT INTO `expertise` VALUES (97, '61', '12', '16', '/', '2005-04-07 15:08:08');
INSERT INTO `expertise` VALUES (98, '61', '4', '17', '/USURE IMPORTANTE DES AUBES VU PAR SLV\r\nREMONTAGE DE LA ROUE USE AVEC ACCORD SLV \r\n', '2005-04-07 15:11:59');
INSERT INTO `expertise` VALUES (99, '61', '26', '21', '/reparation des 2 clapets', '2005-04-07 15:13:50');
Merci de votre aide,
FAb

par daoud » 16 nov. 2005, 11:38

si je meurs aujourd'hui, je mourrais moins con. Merci Cyrano ;)

par sadeq » 16 nov. 2005, 10:29

Remarque :
Pour réussir la jointure à gauche il faut que l'ordre des tables dans le FROM soit bien choisi.
La table qui contient les élèments à forcer l'inclusion doit se situer à gauche de celle qui peut contenir des références nulles.

C'est pourquoi la requête de Cyrano marche bien alors que ta requête ne marche pas.

Une jointure à gauche entre 2 tables A et B veut dire : inclure tous les enregistrements de A et seulement ceux de B pour lesquels les champs joints sont égaux.

Si on inverse l'ordre dans le FROM entre A et B les résultats ne seront pas les mêmes dans le cadre d'une jointure à gauche ou à droite d'ailleurs.
Je crois que c'est logique tout ça.

Une autre remarque trés importante:
Quand la jointure à gauche ou à droite implique plusieurs tables, il faut faire trés attention car tantque le nombre de tables augmente, le multiplexage entre les occurences des tables augmente.
Exemple :

Code : Tout sélectionner

T1 T2 T3 ----------------------------- A -------> B ---------> C B ---------> D A -------> E
ici : A va apparaitre 3 fois avec une jointure à gauche entre (T1 et T2) et (T2 et T3)

par Cyrano » 16 nov. 2005, 10:03

Bon, j'ai fait un petit test. J'ai créé deux tables, table_1 et table_2 comme ceci:

Code : Tout sélectionner

table_1 +--------+-------------+ | tb1_id | tb1_element | +--------+-------------+ | 1 | a | | 2 | b | | 3 | c | | 4 | d | +--------+-------------+ table_2 +--------+--------+-------------+ | tb2_id | tb1_id | tb2_valeurs | +--------+--------+-------------+ | 1 | 1 | 2 | | 2 | 3 | 7 | | 3 | 3 | 5 | | 4 | 4 | 7 | | 5 | 1 | 6 | | 6 | 1 | 4 | | 7 | 4 | 7 | +--------+--------+-------------+
Ensuite, j'ai fait la requête suivante, je te laisse voir le résultat obtenu toi-même:

Code : Tout sélectionner

mysql> SELECT t1.tb1_element AS 'Eléments', COUNT(tb2_valeurs) AS 'nombre de valeurs' -> FROM table_1 AS t1 LEFT JOIN table_2 AS t2 -> ON t2.tb1_id = t1.tb1_id -> GROUP BY t1.tb1_element; +----------+-------------------+ | Eléments | nombre de valeurs | +----------+-------------------+ | a | 3 | | b | 0 | | c | 2 | | d | 2 | +----------+-------------------+
Le LEFT JOIN permet d'afficher tout, y compris les lignes qui n'ont pas de correspondance dans la clause de jointure.

par FAbrice » 16 nov. 2005, 09:04

Ben, malgré ton lien, c pas ce que je désire :oops:

Je vais compléter l'exemple de mon premier post, pê que ca vous aidera a mieux cerner le but a atteindre :lol:

table n°1
id---elements
1--------a
2--------b
3--------c
4--------d
...

table n°2:
id---elements --- valeurs
1--------1-------------2
2--------3-------------7
3--------3-------------5
4--------4-------------7
5--------1-------------6
6--------1-------------4
7--------4-------------7

But est d'obtenir un tableau comme le suivant:
elements --- nombre de valeurs
---a-------------3
---b-------------0
---c-------------2
---d-------------2

Voila, j'espère que cet exemple va permettre de progresser :wink:

FAb

par daoud » 15 nov. 2005, 13:55

Pour moi, le problème qu tu poses est le même que ici
En effet, comment veux-tu récupérer des enregistrements qui n'existent pas.... A mon avis tu dois utiliser la solution de l'UNION proposée dans le post que je t'indique. (la solution de la jointure gauche fonctionnerait si les enregistrements existaient avec une valeur null correspondante)

par FAbrice » 15 nov. 2005, 10:10

salut Cyrano,

je viens d'essayer ta requete.
deux choses:
la premiere, c qe ca ne plante pas et que ca me renvoie les meme donnéess qu'avec la mienne.
la seconde, un peu moins bonne, c que les elements sans valeurs n'apparaissent pas :oops:

Tu vois d'ou ca peut venir?
FAb

PS: je l'ai tester sous myadmin et aucun message d'erreur

par Cyrano » 15 nov. 2005, 09:38

Sauf erreur de ma part, ta requête devrait ressembler à ceci :

Code : Tout sélectionner

SELECT elements.Details as toto, defaut.Description as tata ,count(*) as titi FROM expertise LEFT OUTER JOIN elements ON expertise.Element = elements.ID LEFT OUTER JOIN defaut ON expertise.Defaut = defaut.ID WHERE expertise.Defaut > 1 AND defaut.id = 2 GROUP BY expertise.Element, expertise.Defaut ORDER BY toto DESC
Les colonnes où tu n'as pas de valeur contiendront "NULL" et tu auras toutes les lignes.

À tester

Note, ce n'est pas du PHP mais du SQL, je déménage sujet vers le forum "Bases de données"

par FAbrice » 15 nov. 2005, 08:38

bonjour,

je viens de regarder la requete que tu me proposes pjl mais je ne vois pas comment l'adapter a ma synthaxe actuelle:

Code : Tout sélectionner

SELECT elements.Details as toto, defaut.Description as tata ,count(*) as titi FROM expertise, elements, defaut WHERE expertise.Element=elements.ID and expertise.Defaut=defaut.ID and expertise.Defaut>1 and defaut.id=2 GROUP BY expertise.Element, expertise.Defaut ORDER BY toto DESC
Dans ce cas, je compte combien d'enregistrement g par element avec le defaut dont l'id=1.
si il n'y a pas d'enregistrement pour un element, il n'apparait pas dans ma liste.

est ce que vous pourriez m'aider sur ce coups la?

Merci de votre aide,
FAb

par pjl » 14 nov. 2005, 16:25

ca fait je ne sais combien de fois que l'on en parle. Une petite recherche sur le forum ou le net devrait te donner la réponse.

par pitt » 14 nov. 2005, 16:04

Pourquoi le select * n'est il pas une bonne méthode pjl?

par pjl » 14 nov. 2005, 15:50

Pour pitt, le SELECT * est une mauvaise habitude à proscrire.


Pour FAbrice, avec une jointure externe, ca devrait marcher.

Du style :

Code : Tout sélectionner

SELECT tab2.valeur FROM table2 AS tab2 LEFT JOIN table1 AS tab1 ON tab2.index = tab1.index WHERE tab1.index IS NULL

par pitt » 14 nov. 2005, 15:04

avec deux requetes

$req1="select * from table1";
$res1=mysql_query($req1);

while ($t1=mysql_fetch_row($res1)){

//affichage éléments
echo $t1[1]

$req2="select * from table2 where id='$t1[0]'";
$res2=mysql_query($res2);

//si résultats affichage
while ($t2=mysql_fetch_row($res2)){
echo $t2[1];

}
}

Normalement ca passe