Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/03/2011, 11h34   #1
Invité de passage
 
Inscription : mars 2011
Messages : 12
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : mars 2011
Messages : 12
Points : 1
Points : 1
Par défaut UPDATE ID entre deux tables

Bonjour,
J'essaie de réfléchir à la finalisation d'une petite base dont j'expose ici deux tables :

Table "gestion de temps" dont la fonction est de collecter et de calculer des heures de travail pour différentes activités où la plus pratiquée est 'distribution'
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE TABLE `gtd` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `activite` char(75) NOT NULL,
  `id_type` smallint(3) UNSIGNED NOT NULL,
  `date` date NOT NULL,
  `session_travail` tinyint(1) NOT NULL COMMENT '1 pour matin et 2 pour après-midi',
  `debut` time NOT NULL,
  `fin` time NOT NULL,
  `duree` int(11) NOT NULL,
  `id_distributeur` int(11) UNSIGNED NOT NULL COMMENT 'identifiant du salarié',
  PRIMARY KEY  (`id`),
  KEY `id_distributeur` (`id_distributeur`),
  KEY `id_type` (`id_type`)
)
Table dont la fonction est de calculer un nombre de documents mis en boîte aux lettres sur un territoire donné pour un client donné :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE TABLE `session_distribution` (
  `id` int(10) NOT NULL AUTO_INCREMENT,
  `st_salarie` int(11) NOT NULL COMMENT 'identifiant du salarié',
  `st_date` date NOT NULL,
  `st_session_travail` tinyint(1) NOT NULL COMMENT '1 pour matin et 2 pour après-midi',
  `st_commune` int(11) NOT NULL,
  `st_secteur` char(40) NOT NULL,
  `st_qte_depart` int(11) NOT NULL COMMENT 'Quantité de docs',
  `st_id_commande` int(11) NOT NULL,
  `st_id_gtd` int(11) NOT NULL COMMENT 'Identifiant de gestion de temps'
  PRIMARY KEY  (`id`)
  UNIQUE KEY `idx_six_col` (`st_salarie`,`st_date`,`st_session_travail`,`st_commune`,`st_secteur`,`st_id_commande`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1436 ;
Au départ, je m'étais dis que je pourrais calculer le temps de distribution pour une commande donnée en mettant l'id de 'gtd' dans la table session_distribution (st_id_gtd) A priori, ça semble logique mais cela reste un peu flou pour moi sauf à la faire manuellement : ce qui est absurde. (Ces tables, séparément, remplissent correctement leur rôle en ce qui concerne le comptage de temps ou de docs).
Je me demande si j'ai bien tous les éléments pour rendre cette insertion automatique possible ?
Qu'en pensez-vous ?
sarabaïte est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/03/2011, 18h41   #2
Invité de passage
 
Inscription : mars 2011
Messages : 12
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : mars 2011
Messages : 12
Points : 1
Points : 1
Par défaut là où j'en suis...

Pour envoyer l'ID de gestion de temps dans la table session_distribution afin de calculer ensuite le temps de production, je fais
Code :
1
2
3
4
5
6
7
8
9
10
 
UPDATE session_distribution SET st_id_gtd = ( SELECT gtd.id
FROM gtd
WHERE activite = 'Distribution'
AND id_distributeur = st_salarie
AND session_travail = st_session_travail
AND date = st_date
AND date
BETWEEN '2011-01-01'
AND '2011-03-31')
MySQL a répondu: Subquery returns more than 1 row

En fait, ça marche pour les journées où il y a une ligne le matin et une ligne l'après-midi en gestion de temps avec activité = distribution correspondant à une ligne matin, une ligne l'après-midi dans la table session_distribution mais cela pose problème quand il y a deux sessions par exemple le même après-midi suite à un changement de secteur donc deux lignes dans la table session_distribution... ce que je prévoyais

Si vous pouviez m'éclairer. Merci
sarabaïte est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h15.


 
 
 
 
Partenaires

Hébergement Web