Page 1 sur 1

Duplication de données: Select From de plusieurs tables

Posté : 02 mai 2013, 13:58
par Nico La
Bonjour à tous,

Simple visiteur du forum depuis quelques années, j'ai pris mon courage à deux mains et décidé de passer contributeur.

Explication du problème:

J'ai une page php qui va chercher des données dans trois tables différentes:

- Table 1 = Nom, prénom, mobile
- Table 2 = Telephone fixe
- Table 3 = email

J'ai alors fait cette requête: $req = "SELECT * FROM table 1, table 2, table 3";

Suivi de l'appel aux valeur souhaitée:
$req = "SELECT * FROM table 1, table 2, table 3";
 
$result = mysql_query ($req) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
 
 
 
while ($row = mysql_fetch_array($result)){
 
echo '<table>
 
<tr>
 
<u>'. $row["nom"] .'
 
</tr>
 
<tr>
 
'. $row["prenom"] .'</u>
 
</tr>
 
Téléphone:
 
<tr>
 
'. $row["phone"] .'
 
</tr>
 
Mobile:
 
<tr>
 
'. $row["mobile"] .'
 
</tr>
 
Email:
 
<tr>
 
'. $row["email"] .'
 
</tr>
 
 </table>';

Aucun problème (pour moi) dans le code, jusqu'à ce que j'essai et que je vois mes champs bien remplis mais dupliqués X fois.

Je n'arrive pas à trouver le problème, j'esperais avoir une aide sur le forum.

Bonne journée à vous !

Nico

Re: Duplication de données: Select From de plusieurs tables

Posté : 02 mai 2013, 14:21
par Gorbi
Bonjour,
En fait ton erreur vient de l'utilisation de la commande SELECT avec plusieurs tables, je te conseille de consulter des sites qui t'expliquent comment manipuler ces commandes. Pour ce qui est de l'explication de tes duplications cela vient du fait que cette requête ne possède pas de critère de jointure entre une table et l'autre. Dans ce cas, le compilateur SQL calcule le produit cartésien des deux ensembles, en gros à chaque ligne de la première table, il accole l'ensemble des lignes de la seconde.
Il est donc nécessaire de lui indiquer la clé de liaison avec un WHERE.

Re: Duplication de données: Select From de plusieurs tables

Posté : 02 mai 2013, 14:23
par moogli
salut,


La comme ça je dirais que tu as fait un produit cartésien : ligne de table1 multiplier par le nombre de ligne de la table2 le tout multiplier par le nombre de tuple de la table 3 ...

Il te faut réaliser une jointure entre les tables.

La jointure c'est ce qui permet de faire la liaison entre les différentes tables (historie de savoir a qui appartient un email ;) )

Dans ton cas les tables sont surement de ce style

utilisateur (
id
nom
prenom
)

email (
idutilisateur
email
)

telephone (
idutilisateur
tel
)

la requête devient donc à ça
select * from utilisateur 
join email using(idutilisateur)
join telephone using(idutilisateur)
@+

Re: Duplication de données: Select From de plusieurs tables

Posté : 02 mai 2013, 14:36
par Nico La
Un grand merci pour vos réponses, en effet je commence à voir le problème !

J'ai donc essayais différentes façon d'utiliser ton code:
SELECT * FROM utilisateur 
JOIN email USING(idutilisateur)
JOIN telephone USING(idutilisateur)
Cependant je n'ai que des erreurs. Que faut-il mettre dans idutilisateur ?

Sachant que mes tables sont sous cette forme:

vid = 106
nid = 106
name = Dubois
first = Jean

(VID et NID sont tous deux idutilisateur).

Re: Duplication de données: Select From de plusieurs tables

Posté : 02 mai 2013, 14:40
par Nico La
Je souhaitais vous remercier !
J'ai finalement réussi depuis hier matin que je cherchais !

Encore un grand merci !

Bonne journée à vous.

Re: [RESOLU] Duplication de données: Select From de plusieur

Posté : 02 mai 2013, 14:43
par moogli
de rien