Une Requête au lieu de 2 ?

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Une Requête au lieu de 2 ?

par bercy » 13 mai 2007, 16:09

Avec cela ça fonctionne

Code : Tout sélectionner

$result=mysql_query("SELECT DISTINCT e.Nom,c.FamilleID FROM cotisation AS c JOIN enfants AS e USING (FamilleID) WHERE c.Garde = 'OUI' AND c.Mois LIKE '$Mois' ORDER BY e.Nom"); while($row=mysql_fetch_row($result)) { $Nom=$row[0]; $FamilleID=$row[1];
Merci encore

par bercy » 13 mai 2007, 16:03

Merci de te préoccuper de mon soucis.

Voici je que je recherche.

J'ai une table appelé cotisation avec 2 champs
FamilleID et Garde.


J'ai une 2ème table enfants avec plusieurs champs. Seul le champ Nom m'interresse.


Je souhaite récupérer les N° FamilleID de ma table cotisation OU le Champ GARDE = OUI.

Une fois récupéré cette liste je souhaite afficher le Nom de la famille à la place du N° FamilleID.

Ta requête avec jointure fonction bien, mais si j'ai 2 enfants qui ont le même N° FamilleID dans la table enfants, je récupère 2 fois le Nom de Famille.

Si j'utilise 2 requêtes cela fonctionne mais je n'arrive pas à faire un ORDER sur le Nom de famille

Code : Tout sélectionner

$result=mysql_query("SELECT FamilleID FROM cotisation WHERE Garde = 'OUI' AND c.Mois LIKE '$Mois'"); while($row=mysql_fetch_row($result)) { $FamilleID=$row[0]; $result2=mysql_query("SELECT Nom FROM enfants WHERE FamilleID = '$FamilleID' "); while($row=mysql_fetch_row($result)) { $Nom=$row[0];} }
J'espère que c'est clair ?

Cordialement

par Hubert Roksor » 13 mai 2007, 15:39

Alors là il va falloir que tu expliques ce que tu veux faire réellement parce que sinon je ne fais que deviner. La méthode que j'ai décrite correspond précisément à ton exemple plus haut. Essaie d'expliquer ce que tu veux réellement faire au lieu d'expliquer comment tu veux le faire.

par bercy » 13 mai 2007, 15:02

Merci pour ton explication détaillé.

J'ai bien compris le fonctionnement des jointures mais ce que je n'arrive pas c'est d'ajouter un DISTINCT, afin de ne pas récuperer des doublons de nom.

Merci encore.

par Hubert Roksor » 13 mai 2007, 14:54

Erm... c'est pas comme si on avait pas un demi-million de tutoriels à ce sujet...

Je te donne la version courte, étape par étape. Pour commencer, par quel moyen trouves-tu tes données ? apparement c'est pas les colonnes "Garde" et "Mois" de la table "cotisation". Comme "cotisation" c'est long à taper on lui donne un alias "c"

Code : Tout sélectionner

SELECT * FROM cotisation AS c WHERE c.Garde = 'OUI' AND c.Mois LIKE '$Mois'
Quelle table souhaites-tu joindre ? réponse : "enfants", ou "e"

Code : Tout sélectionner

SELECT * FROM cotisation AS c JOIN enfants AS e WHERE c.Garde = 'OUI' AND c.Mois LIKE '$Mois'
...ah oui, mais comment tu fais la jointure ? par la colonne "FamilleID" de chaque table

Code : Tout sélectionner

SELECT * FROM cotisation AS c JOIN enfants AS e USING (FamilleID) WHERE c.Garde = 'OUI' AND c.Mois LIKE '$Mois'
Ensuite il ne reste plus qu'à préciser quelles colonnes tu voulais récupérer : "Nom", de la table "e"

Code : Tout sélectionner

SELECT e.Nom FROM cotisation AS c JOIN enfants AS e USING (FamilleID) WHERE c.Garde = 'OUI' AND c.Mois LIKE '$Mois'
Edit: j'ai pas compris le truc sur DISTINCT, la réponse doit être non. Si tu as 2 enfants alors tu as 2 lignes, c'est 100% normal. Si tu as 2 enfants par famille et 2 familles tu as 4 enregistrements, et ainsi de suite. À toi de faire ce que tu as à faire en PHP.

par bercy » 13 mai 2007, 14:45

J'ai trouvé cela

Code : Tout sélectionner

$result=mysql_query("SELECT c.FamilleID,e.Nom,e.Prenom,e.ID FROM cotisation AS c LEFT JOIN enfants AS e ON c.FamilleID = e.FamilleID WHERE c.Garde = 'OUI' AND c.Mois LIKE '$Mois' ORDER BY e.Nom"); while($row=mysql_fetch_row($result)) { $FamilleID=$row[0]; $Nom=$row[1]; $Prenom=$row[2]; $ID=$row[3];
Mais lorsque j'ai 2 enfants par famille j'ai 2 lignes de résultat. Est il possible d'utiliser un DISTINCT. Si oui quel serait la synthaxe.

Merci de votre aide[/code]

Une Requête au lieu de 2 ?

par bercy » 13 mai 2007, 14:42

Bonjour,

j'utilise 2 requête pour afficher un résultat, je sais que l'on peut faire des jointure mais je n'arrive pas à trouver la synthaxe.

Voici mes 2 requêtes

Code : Tout sélectionner

$result=mysql_query("SELECT FamilleID FROM cotisation WHERE Garde = 'OUI' AND c.Mois LIKE '$Mois'"); while($row=mysql_fetch_row($result)) { $FamilleID=$row[0]; $result2=mysql_query("SELECT Nom FROM enfants WHERE FamilleID = '$FamilleID' "); while($row=mysql_fetch_row($result)) { $Nom=$row[0];} }
Merci @ vous tous