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 :

[MySQL] - jointure de tables


Sujet :

Requêtes MySQL

  1. #1
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 60
    Points : 55
    Points
    55
    Par défaut [MySQL] - jointure de tables
    Bonjour,

    j'ai une table USER et une table STOCK dont la structure est :

    * id : id de la table
    * user_id : id du user correspondant à l'entrée de stock courante
    * valeur : valeur du stock

    Je voudrais executer une requete qui me trouve le user qui a des stocks ayant des valeur que je spécifierais.
    En d'autres termes, si je voudrais choper l'id du user ayant par ex. les valeurs 'a' et 'b' dans la table STOCK.
    J'ai essayé dans un premier temps la requete :
    SELECT user_id FROM stock WHERE valeur='a' AND valeur='b'
    mais il s'avère, et c'est logique, que cette requete renvoit toujours du vide pck elle contient un where contradictoire.
    Il me semble que la solution de mon problème est l'utilisation de jointure ; je vous serais reconnaissant de me donner la syntaxe exacte.

    Merci d'avance,

    yelbied

  2. #2
    Membre chevronné
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Points : 1 839
    Points
    1 839
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT u.id FROM user as u, stock as s WHERE u.id = s.id AND (s.valeur = 'a' OR s.valeur = 'b');
    ;-)

  3. #3
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 60
    Points : 55
    Points
    55
    Par défaut
    Re,

    je pense que je ne me suis pas bien fait comprendre...
    je voulais dans cet exemple avoir l'id du user ayant un stock avec les deux valeurs 'a' ET 'b'.
    l'idée est de faire un "SELECT user_id FROM stock WHERE valeur='a'", et puis de refaire un autre SELECT sur les résultat de la première requete, de facon à rétrécir le champ de recherche en fonction des différentes valeur que l'on cherche (ie. faire une intersection entre toutes les valeur pour trouver l'user qui en a toutes).
    en fois de plus, pense que ca se fait avec une jointure (ou bien des SELECT imbriqués), mais je ne connais malheureusement pas la syntaxe.

    merci encore pour votre aide.

  4. #4
    Membre chevronné
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Points : 1 839
    Points
    1 839
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT user_id FROM stock WHERE user_id IN (SELECT user_id FROM stock WHERE valeur='b') AND valeur='a';
    c'est ce que tu veux ?

  5. #5
    Membre expert
    Avatar de TheLeadingEdge
    Inscrit en
    Mai 2005
    Messages
    1 199
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 1 199
    Points : 3 103
    Points
    3 103
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT 	*
    FROM	stock S1
    WHERE	S1.valeur = 'b'
    AND	EXISTS
    (
    SELECT 	1
    FROM	stock S2
    WHERE	S2.user_id = S1.user_id
    AND	S2.valeur = 'a'
    )
    A +

    [EDIT] ;-) le SQL est 1 exercice intellectuel nocturne ;-) [/EDIT]

  6. #6
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 60
    Points : 55
    Points
    55
    Par défaut
    Re,

    le problème persiste encore : les deux solutions proposée contiennent une erreur de syntaxe (j'utilise MySQL 4.0.20).
    je voudrais aussi savoir comment faire si le nombres de valeurs voulues ne se limite pas à 2 mais à n valeurs.

    merci encore

  7. #7
    Membre expert
    Avatar de TheLeadingEdge
    Inscrit en
    Mai 2005
    Messages
    1 199
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 1 199
    Points : 3 103
    Points
    3 103
    Par défaut
    Re,

    Cette solution là n'utilise pas de s-rq. Elle devrait convenir.
    PS: Tu n'avais pas précisé la v° de ton moteur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT 	S1.user_id, 
    	S1.valeur, 
    	S2.valeur
    FROM	stock S1
    INNER JOIN stock S2
    ON	S2.user_id = S1.user_id
    AND	S1.valeur = 'a'
    AND	S2.valeur = 'b';
    A +

    [edit] PS 2: Tu n'as pas non plus indiqué qu'elle était ton erreur
    Pense à préciser tout ça pour 1 prochaine question [/edit]

  8. #8
    Membre du Club
    Inscrit en
    Mars 2005
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 60
    Points : 55
    Points
    55
    Par défaut
    je te remercie, TheLeadingEdge, pour ton aide : ça marche bien cette fois ci
    par contre, je voulais te demander comment faire pour extraire l'id non pas suivant 2 valeurs 'a' et 'b', mais suivant n valeurs ?
    aussi, cette requete serait-elle sujette à etre automatisée et générée automatiquement (par PHP) en bouclant sur les n valeurs que l'ont veut traiter ?

    merci encore...

Discussions similaires

  1. [MySQL] MySql: jointure de tables pour maillage interne
    Par amdawb dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 23/11/2014, 22h39
  2. [MySQL] Jointure à 5 tables
    Par norwy dans le forum Langage SQL
    Réponses: 3
    Dernier message: 26/04/2010, 14h10
  3. MySQL : jointure de tables
    Par rockingstone dans le forum Requêtes
    Réponses: 3
    Dernier message: 18/07/2006, 14h16
  4. Jointure de tables sur 2 base MySQL, si poussible??
    Par nerik38 dans le forum Requêtes
    Réponses: 2
    Dernier message: 21/11/2005, 20h12
  5. [MySQL] Jointure sur une table déjà jointe
    Par genova dans le forum Requêtes
    Réponses: 3
    Dernier message: 18/10/2005, 23h54

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