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 :

Besoin d'aide pour une requête


Sujet :

Requêtes MySQL

  1. #1
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut Besoin d'aide pour une requête
    Bonjour à tous,

    Je voudrais vous demander conseil pour articuler une requête, voici les structures dont je dispose:
    Une table articles_commandes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    commande_id | produit_id
    1 | 212
    1 | 158
    2 | 258
    2 | 158
    3 | 1254
    Une table produits
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    id | nom | fournisseur
    212 | toto | 12
    158 | tata | 14
    258 | tutu | 14
    1254 | tete | 6
    Ce que je voudrais faire c'est déterminer les commandes dont les produits appartiennent tous au même fournisseur, en l'occurrence, le 14.
    Dans cet exemple, la commande N° 2 est composée à 100% de produits du fournisseur 14, ce qui n'est pas le cas de la N° 1 et N° 3.
    Jouable ?

  2. #2
    Membre émérite
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 563
    Points : 2 390
    Points
    2 390
    Par défaut
    Tu peux essayer :

    Code SQL : 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
    SELECT 
    	DISTINCT(c.commande_id) 
    FROM 
    	articles_commandes as c 
    	LEFT JOIN produits as p ON c.produit_id = a.id 
    WHERE 
    	0 = (
    		SELECT 
    			COUNT(*) 
    		FROM 
    			articles_commandes as c2 
    			LEFT JOIN produits as p2 ON c.produit_id = a.id
    		where
    			c2.commande_id = c.commande_id 
    			AND p2.fournisseur <> p.fournisseur
    	)
    Zend Certified PHP Engineer

    « Crois-tu comprendre le monde juste en matant le 20H Ou connaître l'histoire en ayant lu que l'angle des vainqueurs ? » Keny Arkana

  3. #3
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut
    Bonjour et merci,

    Je viens de tester ta requête, après quelques modifs , mais elle ne retourne rien :
    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
     
    SELECT 
    	DISTINCT(c.commande_id) 
    FROM 
    	commandes_articles AS c 
    	LEFT JOIN produits AS p ON c.produit_id = p.id 
    WHERE 
    	0 = (
    		SELECT 
    			COUNT(*) 
    		FROM 
    			commandes_articles AS c2 
    			LEFT JOIN produits AS p2 ON c2.produit_id = p2.id
    		WHERE
    			c2.commande_id = c.commande_id 
    			AND p2.four <> p.four
    	)
    Je ne suis pas super pointu en SQL mais je me demande quand même si je ne vais pas devoir passer par PHP. Parce que je voudrais en fait connaitre la proportion de commandes composées uniquement de produits du fournisseur 14. Pas gagné.

  4. #4
    Membre émérite
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 563
    Points : 2 390
    Points
    2 390
    Par défaut
    Je viens de faire un test :

    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
    --
    -- Structure de la table `commandes_articles`
    --
     
    CREATE TABLE IF NOT EXISTS `commandes_articles` (
      `commande_id` int(11) NOT NULL,
      `produit_id` int(11) NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
     
    --
    -- Contenu de la table `commandes_articles`
    --
     
    INSERT INTO `commandes_articles` (`commande_id`, `produit_id`) VALUES
    (1, 212),
    (1, 158),
    (2, 258),
    (2, 158),
    (3, 1254);
     
    --
    -- Structure de la table `produits`
    --
     
    CREATE TABLE IF NOT EXISTS `produits` (
      `id` int(11) NOT NULL,
      `nom` varchar(20) NOT NULL,
      `four` int(11) NOT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
     
    --
    -- Contenu de la table `produits`
    --
     
    INSERT INTO `produits` (`id`, `nom`, `four`) VALUES
    (212, 'toto', 12),
    (158, 'tata', 14),
    (258, 'tutu', 14),
    (1254, 'tete', 6);
    Ta requête modifiée me renvoi 2 résultats : les commandes 2 et 3.
    Ce qui est correct.



    Si tu veux rechercher uniquement les commandes du fournisseur 14, tu peux juste rajouter une clause dans le WHERE :

    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
    SELECT 
    	DISTINCT(c.commande_id) 
    FROM 
    	commandes_articles AS c 
    	LEFT JOIN produits AS p ON c.produit_id = p.id 
    WHERE 
    	p.four = 14
    	AND 0 = (
    				SELECT 
    					COUNT(*) 
    				FROM 
    					commandes_articles AS c2 
    					LEFT JOIN produits AS p2 ON c2.produit_id = p2.id
    				WHERE
    					c2.commande_id = c.commande_id 
    					AND p2.four <> p.four
    			)
    Zend Certified PHP Engineer

    « Crois-tu comprendre le monde juste en matant le 20H Ou connaître l'histoire en ayant lu que l'angle des vainqueurs ? » Keny Arkana

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    Bonjour,

    La bonne approche pour ce genre de cas est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select commande_id
    from commandes_articles a
    inner join produits b on a.produit_id = b.id
    group by commande_id
    having count(distinct four) = 1

Discussions similaires

  1. Besoin d'aide pour une requête de MAJ (modif. de car.)
    Par ptitscrat dans le forum Access
    Réponses: 5
    Dernier message: 22/03/2006, 17h27
  2. besoin d'aide pour une requête
    Par lipao17 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 04/01/2006, 16h55
  3. Besoin d'aide pour une requête SQL
    Par Borami dans le forum Langage SQL
    Réponses: 1
    Dernier message: 07/11/2005, 10h33
  4. Besoin d'aide pour une Requête SQL ...
    Par Kokito dans le forum Requêtes
    Réponses: 2
    Dernier message: 07/07/2004, 11h56
  5. besoin d'aide pour une requête
    Par Damien69 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 31/03/2004, 15h38

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