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

PHP & Base de données Discussion :

[MySQL] Select avec WHERE sur un champs d'une autre table ?


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 76
    Points : 31
    Points
    31
    Par défaut [MySQL] Select avec WHERE sur un champs d'une autre table ?
    Bonjours Bonjours.

    je voudrais savoir si c'est possible de faire un test WHERE sur une autre table ?

    Je m'explique, j'ai 3 tables, qui sont relier entre elle :
    Niveau , Exercice , Sequence :

    la table niveau contient des exercices qui contient des sequences...

    en gros j'arrive à récupérer le nombre d'exercice en faisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $sql = "SELECT COUNT(*) as nb FROM exercice WHERE id_lvl = $id_lvl";
    $req = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
    $row = mysql_fetch_assoc($req);
    $nbExo = $row['nb'];
    mais je voudrais maintenant récupérer de la même magnière le nombre de séquence, qui appartiennent à l'id de l'exercice qui appartient au id_lvl ci dessus.

    Auriez vous une solution please ?

  2. #2
    Membre averti Avatar de Nheo_
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2011
    Messages
    323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2011
    Messages : 323
    Points : 416
    Points
    416
    Par défaut
    Re ,

    Il suffit de joindre ta 2ème table à la première. Voir la doc .

  3. #3
    Membre averti Avatar de ZnhaarX
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 146
    Points : 307
    Points
    307
    Par défaut
    Salut,

    Il me semble que ce que tu cherches correspond aux jointures en SQL non ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT COUNT(s.id_seq) AS nb FROM exercice AS e, sequence AS s, niveau AS n WHERE n.id_lvl = $id_lvl AND n.id_lvl = e.id_lvl AND e.id_exo = s.id_seq;"
    Ce ne serait pas quelque chose du genre?
    A noter qu'on peut tout aussi bien passer par les INNER JOIN.
    « War is peace. Freedom is slavery. Ignorance is strength. » - George Orwell

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 76
    Points : 31
    Points
    31
    Par défaut
    Merci a vous deux pour vos réponse

    J'ai compris a merveille le fonctionnement

    à l'aide de la ligne que tu m'as ZnhaarX j'arrive à récupérer toutes les séquences, mais j'ai encore deux petites questions a vous posez :

    Pour le moment j'arrive à récupérer le nombre de séquence total du niveau, mais comment faire pour récupérer le nombre de sequence de l'exercice 1, puis de l'exercice 2... ?

    et Comment faire pour récupérer les informations de la 1er ligne de ma table séquence, ensuite la 2eme, et la 3eme... jusqu'à qu'il n'y en ai plus ?

  5. #5
    Membre averti Avatar de ZnhaarX
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 146
    Points : 307
    Points
    307
    Par défaut
    Citation Envoyé par danydan01 Voir le message
    Pour le moment j'arrive à récupérer le nombre de séquence total du niveau, mais comment faire pour récupérer le nombre de sequence de l'exercice 1, puis de l'exercice 2... ?
    Il suffit de faire comme tu as fait avec ton WHERE n.id_lvl = $id_lvl sauf que tu mets WHERE n.id_exo = 1 etc.
    Après si tu veux faire une requête qui te retourne le nombre de séquence de chacun des exercice, en même temps tu peux utiliser UNION entre deux SELECT:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT COUNT(s.id_seq) AS nb FROM exercice AS e, sequence AS s, niveau AS n WHERE n.id_lvl = $id_lvl AND e.id_exo = 1 AND n.id_lvl = e.id_lvl AND e.id_exo = s.id_seq UNION SELECT COUNT(s.id_seq) AS nb FROM exercice AS e, sequence AS s, niveau AS n WHERE n.id_lvl = $id_lvl AND e.id_exo = 2 AND n.id_lvl = e.id_lvl AND e.id_exo = s.id_seq ";
    C'est la première idée qui me vient; ça ne veut pas dire que ça fonctionne ni qu'il n'y a pas mieux

    Citation Envoyé par danydan01 Voir le message
    et Comment faire pour récupérer les informations de la 1er ligne de ma table séquence, ensuite la 2eme, et la 3eme... jusqu'à qu'il n'y en ai plus ?
    Je sais pas si j'ai bien compris ce que tu veux faire...
    Tu veux sélectionner tous les enregistrements (lignes) de ta table séquence ?
    Dans ce cas là, un simple SELECT fera l'affaire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "SELECT * FROM sequence";
    Après je sais pas si c'est ça que tu voulais faire...
    « War is peace. Freedom is slavery. Ignorance is strength. » - George Orwell

  6. #6
    Nouveau membre du Club
    Inscrit en
    Janvier 2009
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 49
    Points : 28
    Points
    28
    Par défaut
    Citation Envoyé par danydan01 Voir le message
    et Comment faire pour récupérer les informations de la 1er ligne de ma table séquence, ensuite la 2eme, et la 3eme... jusqu'à qu'il n'y en ai plus ?
    Voici une solution qui me vient(pour récupérer les variables et leurs valeurs):une "SELECT",parcourir ligne par ligne. Tu répète au tant de fois que tu souhaites!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    //pour une seule ligne  
    $req='select champ1,champ2,champ3,champ4 from log';	
    $champ=mysql_query($req,$connexion) or die (mysql_error());
    while($donnee=mysql_fetch_row($champ))
    {$id=$donnee[0];
    $var1=$donnee[1];
    $var2=$donnee[2];
    .......
    $varN=$donnee[n];
    }

Discussions similaires

  1. Contrainte sur un champ d'une autre table
    Par Just-Soft dans le forum Débuter
    Réponses: 9
    Dernier message: 16/03/2011, 19h33
  2. Réponses: 3
    Dernier message: 06/09/2008, 06h51
  3. [MySQL] requête avec WHERE sur primary key
    Par newbiemac dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 04/09/2007, 09h41
  4. [MySQL] Requête avec condition sur un champ
    Par nonhosonno dans le forum Langage SQL
    Réponses: 2
    Dernier message: 26/02/2007, 14h00
  5. UPDATE d'une table avec test d'un champ d'une autre table
    Par delphim dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/05/2004, 12h30

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