Aide pour lier plusieurs tables

cs_must Messages postés 69 Date d'inscription vendredi 24 janvier 2003 Statut Membre Dernière intervention 2 octobre 2013 - 25 sept. 2013 à 10:26
jordane45 Messages postés 38161 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 mai 2024 - 3 oct. 2013 à 01:43
Bonjour, je voudrais savoir comment on peut faire pour lier plusieurs tables
je m'explique pour un produit,je voudrais faire une table pour mettre les commentaires dessus de ce produit: genre étoiles, peudos,etc
vaut il mieux mettre une requette oi récuprer par une fonction get l'id ?
auriez vous un exemple de code ?

a bientôt


--

4 réponses

nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 17
25 sept. 2013 à 11:15
salut,

J'ai l'impression que tu pars un peu à l'aveugle ... mais grossièrement, disons que tu souhaite avoir 2 choses : un table qui contiendra les utilisateur et une table qui contiendra des messages des utilisateur : (=> je fais un exemple simpliste)
pour l'utisateur, tu veux les infos suivantes :
- pseudo
- mot de passe
- email
Pour les message :
- texte

Pour commencer, on aura la table utilisateur suivant :

<gras>T_UTIL</gras>
UTIL_ID (-> identifiant auto incrémenté)
UTIL_LOG
UTIL_MDP 
UTIL_EMAIL

Dans la majeur partie des tables, il faut un identifiant à autoincrément, surtout dans le cas où l'on va lier, pour notre cas, un utilisateur à autre chose. Dans l'absolu on pourrai dire que l'email serai la clef unique, mais il est préférable d'utiliser un entier (question d'espace, de vitesse de traitement, et de logique en fait).

Donc, du fait que l'utilisateur aura un identifiant (UTIL_ID) unique qui le désignera, on pourra avoir la table de message suivante :
<gras>T_MESS</gras>
MESS_ID (-> identifiant du message)
MESS_TEXT (-> contenu)
UTIL_ID


En indiquant l'util_id, on lie le message à l'utilisateur et on peu donc, grâce à son id, récupérer tous ses message avec ce genre de requête :

SELECT T_UTIL.UTIL_LOG,T_MESS.MESS_TEXT
from T_UTIL
join T_MESS on T_UTIL.UTIL_ID = T_MESS.UTIL_ID
where UTIL_ID = 1


Cette requête récupérera tous les message de l'utilisateur d'id 1. (il y a d'autre requêtes qui ferai la même chose.) J'utilise une jointure car je préfère, mais tu pourrai écrire :

SELECT T_UTIL.UTIL_LOG,T_MESS.MESS_TEXT
from T_UTIL,T_MESS
where T_UTIL.UTIL_ID = T_MESS.UTIL_ID
AND UTIL_ID = 1


si t'as des questions, demande ;)

bon dev.
naga
1
cs_must Messages postés 69 Date d'inscription vendredi 24 janvier 2003 Statut Membre Dernière intervention 2 octobre 2013
27 sept. 2013 à 10:52
--Salut

oui ai quelques questions :

dans la requête :

SELECT T_UTIL.UTIL_LOG,T_MESS.MESS_TEXT
from T_UTIL,T_MESS
where T_UTIL.UTIL_ID = T_MESS.UTIL_ID
AND UTIL_ID = 1


a quoi ca sert de faire AND UTIL_ID = 1

en fait je voulais faire une galerie photo ou on puisse mettre des commentaires sur chaque photo
mettre une box pour afficher chaqye photo
0
nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 17
Modifié par nagashima le 27/09/2013 à 11:15
dans mon cas c'était une limitation à un utilisateur (je voulais ce qui concernait l'utilisateur numéro 1).

Ce n'est qu'un exemple pour le cas où, pour une structure identique, on veut les message d'un utilisateur donné.

Dans ton cas, d'autres tables seront à prendre en compte, ce qui rendra la requête plus longue, mais le principe à appliquer est celui que je t'ai donné =)


(par exemple, ton image à un id, une table permet de lier les message aux images ... )
0
cs_must Messages postés 69 Date d'inscription vendredi 24 janvier 2003 Statut Membre Dernière intervention 2 octobre 2013
27 sept. 2013 à 16:09
Salut
j'ai bien capté que c'était que pour un utilisateur la requête ,mais vais essayer de chercher un exemple sur le net
je ne sais pas comment on peut gérer l'affihage avec des tableaus


quel logiciel utilisez vous pour programmer en php et MySQL ?

sinon pour mon appli, auriez vousune idée de tables ou de requêtes ?

a bientôt
--
0
nagaD.scar Messages postés 4272 Date d'inscription samedi 8 septembre 2007 Statut Membre Dernière intervention 4 janvier 2023 17
Modifié par nagashima le 27/09/2013 à 16:26
salut.

Donc en gros, pour ce qui concerne ton requêtage, regarde du côté PDO : http://www.php.net/manual/fr/class.pdo.php
pour mettre en forme dans un tableau les résultats de ta requete, par exemple :
$table_string;
 $sql =  'SELECT T_UTIL.UTIL_LOG,T_MESS.MESS_TEXT 
             from T_UTIL,T_MESS 
            where T_UTIL.UTIL_ID = T_MESS.UTIL_ID 
            AND UTIL_ID = 1 '
    foreach  ($DB->query($sql) as $row) 
    { 
         $table = $table . '<tr><td>' . $row['UTIL_LOG'] . '</td><td>' .      $row['MESS_TEXT'] . '</td></tr>' ;
    }
    $table = '<table>' . $table . '</table>';
echo $table;


voilà, ca affichera les résultat dans une table. Ensuite pour ce qui concerne la gestion des table : http://www.commentcamarche.net/contents/504-tableau-html-table

Avec le php tu ne fais que générer le contenu html final, il faut donc avoir en tête que le contenu de ta page est dynamique mais doit être structuré => cette structure te permettra des mises en formes (via le css).

sinon pour ma part, j'utilise le bloc note comme éditeur, mais si tu en veux un plus spécialisé (pour, par exemple, avoir des codes couleurs), tu en as beaucoup, payants et gratuits.

concernant la base de donnée, j'utilise actuellement toad pour m'y connecter, mais sinon tu as toujours (normalement) une interface pour gérer ta base de données mySQL (généralement phpMyAdmin)

Ensuite je ne donnerai pas de structure de table finales ainsi que les requêtes qui permettront de récupérer ce que tu souhaite pour la simple et bonne raison que si je veux faire cela, il faut que je sache ce que fait l'application et qu'une analyse soit faite (c'est un vrai boulot ^^) . Par l'exemple précédent je t'ai exposé une manière simple de lier des tables dans la base de données puis une requête d'exemple qui exploite ce lien, maintenant c'est à toi de bien comprendre ce fonctionnement et comprendre comment l'appliquer dans ton projet.

bon dev et bon week end !
naga
0
jordane45 Messages postés 38161 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 mai 2024 344
27 sept. 2013 à 16:26
Bonjour,

quel logiciel utilisez vous pour programmer en php et MySQL ?
Pour dev en PHP Notepad++ suffit emplement.
Sinon il y a netBeans.

Pour ma part, j'utilise également un petit logiciel bien sympa : HeidiSql qui me permet d'accéder à ma BDD comme vous le feriez via PhpMyAdmin mais en plus rapide et plus ergonomique.

Pour le serveur Web et MySQL, lorsque je Dev en local sur mon poste j'utilisant WAMPSERVER.

comment on peut gérer l'affihage avec des tableaux
Un exemple ici par exemple :
http://www.php.net/manual/fr/mysqli-result.fetch-array.php#95881

-> La requête retourne le résultat dans un "ARRAY" (un tableau de variable) puis on parcourt cet Array via une boucle FOREACH..
Après, pour ce qui est de l'affichage d'un Tableau (HTML), je vous laisse chercher un peu..c'est facile.
0
jordane45 Messages postés 38161 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 mai 2024 344
27 sept. 2013 à 16:39
Pour ce qui est de l'exemple de table, regarde ici
http://cjoint.com/?0IBqIBSbhNX

Pour afficher , par exemple, tous les commentaires de la photo dont l'index = 1, tu peux écrire quelque chose du genre :
Select 
        c.*
       ,u.nom
       ,u.prenom 
       ,u.pseudo
from
        photo p
       ,commentaires c
      ,tbl_users u
where
    c.id_photo = p.id
and 
    u.id = c.id_user


0
cs_must Messages postés 69 Date d'inscription vendredi 24 janvier 2003 Statut Membre Dernière intervention 2 octobre 2013
2 oct. 2013 à 10:52
Salut
peux tu expliquer ou détailler ceci pour la requête

Select
c.*
,u.nom
,u.prenom
,u.pseudo
from
photo p
,commentaires c
,tbl_users u
where
c.id_photo = p.id
and
u.id = c.id_user


si dans la requête tu mets and cela va afficher que pour un seul utilisateur


o,e ,e peut pas faire afficher_comment.php?c.id_photo = p.id
and


est ce vraiment utile de passer des paramètres ou pas ?
0
jordane45 Messages postés 38161 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 mai 2024 344
Modifié par jordane45 le 3/10/2013 à 01:46
bonsoir,

peux tu expliquer ou détailler ceci pour la requête

je vous inviterai à tester la requête. de cette façon vous pourrez mieux la comprendre et l'adapter à vos besoins.

Quoi qu'il en soit, la requête que je vous ai fourni veut dire :
Je veux tout ce qu'il y à dans la table commentaires ( c.* ) ainsi que les noms prénoms et pseudo des Users ( de la table tbl_users ) QUAND (where) les champs id des Commentaires est égale a l'ID de la photo et (pour pouvoir récupérer les infos de mes users qui ont commentés..) lorsque l'ID du user correspond à celui du id_user de la table commentaire
¨Par contre, j'ai omis dans ma requête l'indication de la photo à traiter..

il faut modifier le WHERE par :
where 
 c.id_photo = p.id 
and 
 u.id = c.id_user 
and
p.id = '$id_de_ma_photo'


est ce vraiment utile de passer des paramètres ou pas
La réponse est oui.
la variable $id_de_ma_photo contenant, comme son nom l'indique, l'ID de la photo dont vous souhaitez obtenir les commentaires.
Si vous ne dites pas à votre BDD ce que vous cherchez..elle ne le devinera pas toute seule. :-)

o,e ,e peut pas faire afficher_comment.php?c.id_photo = p.id and
Je n'ai pas compris cette phrase.. désolé.
enfin si peut être...on verra :
Tu peux passer tes paramètres via la méthode POST ou GET.
L'exemple que tu donne..c'est du GET.
Mais tu ne lui mets pas directement du sql...
Si ta page : comment.php contient le code PHP qui effectuera la requête Select qui t'interesse, tu devras avoir un code du genre :
<?php
//
// N'oublie pas d'établir la connexion à ta BDD
//
// récupération de l'ID de la photo passé en GET
(isset($_GET[id_photo ]))?$id_Photo=$_GET['id_phot'];

if ($id_photo){
// ici la requête SQL si l'id de la photo n'est pas vide

$sql = "Select 
 c.* 
 ,u.nom 
 ,u.prenom 
 ,u.pseudo 
from 
 photo p 
 ,commentaires c 
 ,tbl_users u 
where 
 c.id_photo = p.id 
and 
 u.id = c.id_user 
and
p.id = '$id_photo'
";
 // Ensuite tu executes la requête, puis tu affiche le résultat (dans un tableau par exemple. )


// ...
// Le reste de ton code..
// ...
?>


L'appelle de la page se fera donc via une URL du genre :
afficher_comment.php?id_photo=10
// 10 étant l'id de la photo DIX.



PS: pensez à utiliser la coloration syntaxique lorsque vous postez du code (première icone en haut à droite lorsque vous écrivez un message)
<?Php
//La je met mon code .
echo "Bonjour";
?>



Cette fois, tu devrais avoir toutes les billes nécessaires à ton développement.

Cordialement,
Jordane
0
Rejoignez-nous