IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

Sélection ID dont les ID liés ont le statut terminé


Sujet :

Requêtes MySQL

  1. #1
    Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Octobre 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Services de proximité

    Informations forums :
    Inscription : Octobre 2014
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Sélection ID dont les ID liés ont le statut terminé
    Bonjour

    Je suis en train de développer une gestion de jobs et j’ai un soucis avec une requête MySQL.

    La description du projet :
    Un job est constitué de différentes tâches. Certaines tâches ne peuvent être traitées que si certaines tâches sont terminées.

    La requête que je ne parviens pas à réaliser, c’est :
    « Comment sélectionner toutes les tâches ouvertes (statusId = 1) d’un job dont les toutes tâches dont elles dépendandent sont terminées (statusId = 5) ? »

    Exemple de tâches :

    1 Audit commercial
    2 Création logo
    3 Création du graphisme d’une vitrine
    4 Création du graphisme d’un véhicule
    5 ...
    6 ...

    Les tâches 2, 3 et 4 ne doivent pas être affichées dans mon listing tant que la tâche 1 n’a pas le statut terminé.
    Les tâches 5 et 6 ne doivent pas être affichées dans mon listing tant que la tâche 1, 2, 3 et 4 n’a pas le statut terminé.
    ...

    Voici la DB :

    TABLE : Jobs
    id
    Name

    TABLE : Tâches
    id
    statusId
    typeId
    jobId

    TABLE : Status (id 1 = ouvert | id 5 = terminé)
    Id
    value

    TABLE : TâcheType
    Id
    value

    TABLE : DependanceTacheTypeId
    typeId
    dependOfTypeId

    Merci du coup de pouce si vous avez un moment à consacrer pour me dépanner.

    ++

  2. #2
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    Comme ceci ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT		T.*
    FROM		Taches T
    INNER JOIN	DependanceTacheTypeId D
    	ON			D.typeId = T.typeId
    LEFT JOIN	Taches Dep
    	ON			Dep.typeId = D.dependOfTypeId
    	AND			Dep.statusId <> 5
    WHERE		StatusId = 1
    AND			Dep.id IS NULL
    AND			T.jobId = xxx

  3. #3
    Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Octobre 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Services de proximité

    Informations forums :
    Inscription : Octobre 2014
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bonjour aieeeuuuuu

    Merci pour ton aide. Le code que tu propose fonctionne lorsqu'il y a qu'une dépendance. Voir Requête A ci-dessous.
    Par contre, la Requête B ne fonctionne pas correctement car si par exemple la tâche 2 est terminée, j'ai en retour la tâche 5 et 6. Alors que pour afficher les tâches 5 et 6, il faut que toutes les tâches 1, 2, 3 et 4 soit terminées.

    Exemple de tâches :

    1 Audit commercial
    2 Création logo
    3 Création du graphisme d’une vitrine
    4 Création du graphisme d’un véhicule
    5 ...
    6 ...

    Requête A : Les tâches 2, 3 et 4 ne doivent pas être affichées dans mon listing tant que la tâche 1 n’a pas le statut terminé.
    Requête B :Les tâches 5 et 6 ne doivent pas être affichées dans mon listing tant que la tâche 1, 2, 3 et 4 n’a pas le statut terminé.

    Merci d'avance.

    ++

  4. #4
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    n'auriez vous pas omis une des conditions :

    ?

    Dans le cas contraire, merci de fournir un jeu d'essai sous forme de create table + insert into et le résultat attendu.

  5. #5
    Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Octobre 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Services de proximité

    Informations forums :
    Inscription : Octobre 2014
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bonjour aieeeuuuuu

    Voici en pièces jointes les tables et ci-dessous le code de la requête actuel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT	 tasks.*
    	FROM pabg9_chronoengine_jobs_tasks AS tasks
    		INNER JOIN pabg9_chronoengine_jobs_tasks_types_dependance AS dependance
    			ON tasks.typeId = dependance.typeId
    		LEFT JOIN pabg9_chronoengine_jobs_tasks AS tasksDep
    			ON tasksDep.typeId = dependance.dependsOfTypeId
    			AND tasksDep.statusId <> 5
    	WHERE
    		tasks.statusId = 1
    		AND
    		tasksDep.id IS NULL
    Le résultat attendu devrait être :

    Les ROWS des ids 2 et 3 provenant de la table "pabg9_chronoengine_jobs_tasks AS tasks".

    Merci d'avance de votre aide.

    Cordialement

    ++ Gilles
    Fichiers attachés Fichiers attachés

  6. #6
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Citation Envoyé par wanacom Voir le message
    Les ROWS des ids 2 et 3 provenant de la table "pabg9_chronoengine_jobs_tasks AS tasks".
    J'ai dû louper quelque chose :
    D'après vos données, la ligne 2 ne devrait pas ressortir (car elle est en statut fermé)
    en revanche vous devriez avoir les 13, 14 et 15 qui ne dépendent d'aucune tache
    non ?


    essayez comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    SELECT	 tasks.*
    FROM pabg9_chronoengine_jobs_tasks AS tasks
    LEFT JOIN 	pabg9_chronoengine_jobs_tasks_types_dependance AS dependance
    			INNER JOIN pabg9_chronoengine_jobs_tasks AS tasksDep
    				ON tasksDep.typeId = dependance.dependsOfTypeId
    	ON
    			tasks.typeId = dependance.typeId
    			AND tasksDep.jobId = tasks.jobId
    			AND tasksDep.statusId <> 5
    WHERE
    		tasks.statusId = 1
    	AND tasksDep.id IS NULL

  7. #7
    Candidat au Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Octobre 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Services de proximité

    Informations forums :
    Inscription : Octobre 2014
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Bonjour aieeeuuuuu

    Je crois que vous êtes génial ;-)

    Votre requête fonctionne a priori parfaitement sur plusieurs tests que je viens de réaliser.
    Effectivement la ligne 2 ne devait pas s'afficher dans la DB que je vous avais communiqué sur le forum.

    Je ne savais pas qu'on pouvais mettre plusieurs ON sur une jointure. J'ai appris quelque chose.

    Merci pour votre aide qui m'a été bien utile.

    ++ Gilles

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 12
    Dernier message: 12/07/2011, 18h19
  2. [XL-2003] masquer les colonnes dont toutes les cellules VISIBLES ont leur valeur="N"
    Par sylvaine dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 04/03/2011, 11h57
  3. Remplir table avec formulaire dont les champs sont liés
    Par christian.bedere dans le forum IHM
    Réponses: 7
    Dernier message: 03/11/2008, 18h00
  4. Réponses: 3
    Dernier message: 27/08/2007, 23h35
  5. Réponses: 1
    Dernier message: 14/11/2006, 17h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo