Requête SQL - Jonction [Résolu]

Messages postés
772
Date d'inscription
lundi 19 janvier 2009
Dernière intervention
31 mai 2017
- - Dernière réponse : mpmp93
Messages postés
6711
Date d'inscription
mercredi 13 avril 2011
Dernière intervention
28 septembre 2015
- 23 sept. 2014 à 19:18
Bonjour à vous tous

Je doit faire une requête SQL, trop compliquer pour moi...

Voici mes deux tables :

membre :
id_mbr, login, pass_md5

agenda :
id_agd, dt, lieux, event, id_mbr (id_mbr = login du membre)

Voici le but de ma requête :

Lorsqu'un utilisateur ce connecte il voit les informations de son agenda.


Si vous avez une petite aide ;)

Quand on est mort, on ne sait pas qu'on est mort; C'est pour les autres que c'est difficile. Quand on est con, c'est pareil...
Afficher la suite 

Votre réponse

4 réponses

Messages postés
6711
Date d'inscription
mercredi 13 avril 2011
Dernière intervention
28 septembre 2015
0
Merci
Bonjour,

Vous n'avez pas besoin de faire une jointure, juste un filtrage:

$idMbr = "moiToto";
$sql = ".................... WHERE id_mbr='".$idMbr."'"

listera les fiches du membre moiToto

A+
Commenter la réponse de mpmp93
Messages postés
23555
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 décembre 2018
0
Merci
Bonjour,

Je rejoins mpm93 sur la réponse qu'il te donne.
Si l'utilisateur est connecté... tu en connais son ID... et donc un simple WHERE suffirait.

Par contre, je te déconseille d'utiliser le Login comme "lien" entre tes tables.
membre : id_mbr, login, pass_md5

agenda : id_agd, dt, lieux, event, id_mbr (id_mbr = login du membre


Il est préférable d'utiliser les ID ( correspondants de façons sûr à des nombre ou des matricules UNIQUES ) plutôt que les login qui sont des chaines de caractères (du texte).
Niveau performances... il vaut mieux filtrer sur du numéric ( int, BigInt;..) que sur du varchar / texte ..

Donc il serait mieux d'avoir :
membre.id_membre = agenda.id_membre


Pour ce qui est de la jointure (si au final tu veux vraiment en faire une) tu peux la faire de plusieurs façons:

Par exemple:

SELECT *
FROM agenda a
LEFT JOIN membre  m ON m.id_membre = a.id_membre
WHERE m.id_membre ='$id_membre'


ou comme ça :
SELECT *
FROM agenda a
        ,membre  m 
WHERE m.id_membre = a.id_membre 
  AND   m.id_membre ='$id_membre'



NB : Je préfère la première solution.
Nb²: Tu peux remplacer le "*" par la liste des champs que tu veux récupérer.

djsquinje
Messages postés
772
Date d'inscription
lundi 19 janvier 2009
Dernière intervention
31 mai 2017
-
Donc pour la 1er solution : membre.id_membre = agenda.id_membre

Je fait :
select * from (je met quoi) membre.id_membre = agenda.id_membre
?

Merci pour les solutions

EDIT : Ajout des balises de code.
mpmp93
Messages postés
6711
Date d'inscription
mercredi 13 avril 2011
Dernière intervention
28 septembre 2015
-
L'idée est aussi d'utiliser une variable de session qui mémorise le id de l'utilisateur connecté.
Commenter la réponse de jordane45
Messages postés
772
Date d'inscription
lundi 19 janvier 2009
Dernière intervention
31 mai 2017
0
Merci
Je suis un grand débutant en SQL, donc une plus grande explication ne sera pas un refus ;)
jordane45
Messages postés
23555
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 décembre 2018
-
regarde ma réponse
Commenter la réponse de djsquinje
Messages postés
23555
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 décembre 2018
0
Merci
Je fait : select * from (je met quoi) membre.id_membre = agenda.id_membre ?

Comment ça tu mets quoi ????
je t'ai écrit la requête....
SELECT *
FROM agenda a
LEFT JOIN membre  m ON m.id_membre = a.id_membre
WHERE m.id_membre ='$id_membre'


Dans le SELECT tu y mets les noms des champs que tu veux récupérer ..
* veut dire que tu les veux tous...mais tu pourrais ne choisir de récupérer QUE les "dt" et les "lieux" par exemple.... et dans ce cas tu écrirais
SELECT dt,lieux
FROM agenda a
LEFT JOIN membre m ON m.id_membre = a.id_membre
WHERE m.id_membre="id_du_membre"


Si tu ne sais pas comment utiliser les requêtes de type 'SELECT' en SQL je t'invite à te documenter...
par exemple : http://sql.sh/cours/select

PS : Merci de bien vouloir utiliser la coloration syntaxique (les balises de code) lorsque tu postes du code sur le forum.
Explications disponibles ici :
http://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
djsquinje
Messages postés
772
Date d'inscription
lundi 19 janvier 2009
Dernière intervention
31 mai 2017
-
Merci ca fonctionne, ma super camarade (ahah) ma aider et voici le code fonctionelle :

<?php
$requete = "select A.dt, A.lieu, A.event
FROM agenda A, membre M
WHERE A.id_mbr = M.login
AND M.login = '".$_SESSION['login']."'";
$result = mysql_query($requete) or die(mysql_error());

while($obj = mysql_fetch_object($result))
{
	echo $obj->dt.' '.$obj->lieu.' '.$obj->event;
}
?>
jordane45
Messages postés
23555
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 décembre 2018
-
Ca c'est le choix numéro 2 ^^

Par contre, tu as conservé le LOGIN comme instruction dans ton WHERE...
c'est dommage.
Comme je te l'ai indiqué... il est préférable d'utiliser plutôt un ID (numérique) qu'une "string" ...

Enfin bon, si tu souhaites conserver absolument le LOGIN tu peux aussi utiliser le choix 1 histoire de perfectionner ton code ajouter quelques vérifications...:

<?php
$login =isset($_SESSION['login'])?$_SESSION['login']:null;
if($login){
  $requete ="SELECT a.dt
              ,a.lieu
              ,a.event
       FROM agenda a
       LEFT JOIN membre  m ON m.id_membre = a.id_membre
       WHERE m.login = '".$login."'";
 
   $result = mysql_query($requete) or die(mysql_error());
   if(mysql_num_rows($result)>0){
     while($obj = mysql_fetch_object($result)) {
           echo $obj->dt.' '.$obj->lieu.' '.$obj->event;
     }
  }else{
    echo "<br> il n'y a aucun résultat pour cette requête!";
  }
}else{
  echo "<br> Le login n'est pas renseigné !";
}

?>


EDIT : oupsss...petite correction... inversion de ligne entre le mysql_num_rows ... et l'execution de la requête mysql_query
jordane45
Messages postés
23555
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 décembre 2018
-
Et Si la question est résolue..
Merci de ne pas oublier de clôturer le sujet
(en cliquant sur le lien "Marquer comme résolu" qui se trouve sous le titre de la question)

Cordialement,
Jordane
jordane45
Messages postés
23555
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
10 décembre 2018
-
PS: Actuellement tu utilises l'extension mysql ( mysql_query ... mysql_num_rows ... )
Cette extension est obsolète et a terme sera supprimée.
Il faut que tu commences à t'orienter vers mysqli ou la pdo...
Je t'invite à lire ceci :
http://php.net/manual/fr/faq.databases.php#faq.databases.mysql.deprecated
djsquinje
Messages postés
772
Date d'inscription
lundi 19 janvier 2009
Dernière intervention
31 mai 2017
-
Merci pour toi, maintenant que j'ai la base, je module a ma manière en suivant tous les conseilles.

Merci encore ;)
Commenter la réponse de jordane45

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.