requêtes sur plusieurs tables SQL jointures

Eléphant du PHP | 92 Messages

13 juin 2011, 23:13

Bonsoir,

J'ai deux table avec la relation...

dans ma table :
tb_code_prmtn11_pub

j'ai 3 champs :
ID
fld_pub_id
fld_pub_description



dans ma table
tb_code_prmtn11

id_resultat
fld_pub_id
((FOREIGN KEY (`fld_pub_id`) REFERENCES `tb_code_prmtn11_pub` (`fld_pub_id`) ON DELETE NO ACTION ON UPDATE CASCADE,))


alors, je fais une requête SQL :

Code : Tout sélectionner

$req= " SELECT fld_pub_id,fld_pub_description FROM tb_code_prmtn11 INNER JOIN tb_code_prmtn11_pub ON tb_code_prmtn11_pub.fld_pub_id = tb_code_prmtn11.fld_pub_id"; while($row=mysql_fetch_row($rep)){ $fld_pub_id=$row[0]; $fld_pub_description=$row[1]; echo " $fld_pub_id - $fld_pub_description"; }
voici le message d'erreur :
Column 'fld_pub_id' in field list is ambiguous:(

pourquoi ? vous avez des idées ?:rolleyes:

devlop78
Invité n'ayant pas de compte PHPfrance

14 juin 2011, 00:56

Je ne vais pas te donner la réponse, cela me parait trop simple.

Par contre un conseil : quand tu as des jointures, précises toujours sur quelle table tu veux un champs :

ex :

Code : Tout sélectionner

SELECT parents.nom enfants.age FROM parents INNER JOIN enfants ON enfants.parent_id = parents.id WHERE enfants.age > 21
C'est quand même plus clair et ça évite les collisions.

Eléphant du PHP | 92 Messages

14 juin 2011, 15:12

C’est excellent, Merci devlop78...

Ça marche avec le code suivant :

Code : Tout sélectionner

$req= " select $table_db.id_resultat,$table_db.fld_pub_id,$table_db_pub.fld_pub_description FROM $table_db INNER JOIN $table_db_pub ON $table_db.fld_pub_id = $table_db_pub.fld_pub_id";
par contre, je vais faire plusieurs jointures puisque j'ai plusieurs tables avec FOREIGN KEY

Donc, c'est un peu trop volumineux le code...

Exemple

Code : Tout sélectionner

$req= " select $table_db.id_resultat,$table_db.fld_pub_id,$table_db_pub.fld_pub_description,$table_db.fld_toto_id,$table_db.fld_momo_id,$table_db.fld_momo_id,$table_db.fld_etc_id FROM $table_db INNER JOIN $table_db_pub ON $table_db.fld_pub_id = $table_db_pub.fld_pub_id INNER JOIN $table_db_pub ON $table_db.fld_toto_id = $table_db_totos.fld_toto_id";
Alors comment je peux , au moins. diminuer le code suivant :

Code : Tout sélectionner

$req= " select $table_db.id_resultat,$table_db.fld_pub_id,$table_db_pub.fld_pub_description,$table_db.fld_toto_id,$table_db.fld_momo_id,$table_db.fld_momo_id,$table_db.fld_etc_id,
Bonne journée

devlop78
Invité n'ayant pas de compte PHPfrance

14 juin 2011, 23:56

Deux possibilités :

- Tu peux violer la règle que je t'ai donné. Je voulais surtout te pousser à comprendre l'erreur plutot que de te donner une "solution" qui aurait fonctionné tout de suite mais qui ne t'aurait pas fait changer tes habitudes. Si tu es sûr qu'un champ n'a pas d'autres noms, ou qu'il n'est pas dans un risque de collision, tu peux te passer du nom de la table.

- Sinon, il existe ... des alias :

SELECT
A.id, A.nom, B.id, B.nom
FROM
users A, messages B
WHERE
A.id > 7

Tu vois ? En plus si tu sautes des lignes pour tout et que tu indentes, tu verras tout de suite plus clair. Les alias auront en plus l'avantage que tu n'auras pas à répeter ta variable de nom de table plus d'une fois (dans mon exemple). Les alias sont aussi disponibles pour les champs :

A.id as Identifiant
A.id Identifiant

Normalement les deux fonctionnent, le premier est plus propre ^^. Le nom de la colonne, par exemple pour php, sera Identifiant et non id.

Eléphant du PHP | 92 Messages

15 juin 2011, 14:45

Super devlop78,

Merci les informations sur les "alias"

Bonne journée

balatus
Invité n'ayant pas de compte PHPfrance

25 sept. 2011, 06:47

Moi je comprend pas trop j'ai sa :

Code : Tout sélectionner

<?php mysql_select_db($realmd,$connexion) or die(mysql_error()); $post = $_SESSION['id']; $sql="SELECT * FROM account,account_access,mail WHERE id='$post'"; $resultat=mysql_query($sql) or die ("Erreur requette SQL"); $info=mysql_fetch_array($resultat); ?>
Sa fonctionne pas ... j'ai besoin de lire toutes les colonnes de 3 table différentes lié à l'ID de la session et sa marche pas..

Un personne peut m'éclairer ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

27 sept. 2011, 00:11

il te manque les jointures la dans ton code !

pourquoi remonter un sujet qui n'est pas de toi ?

créer un sujet à toi, avec ton problème, le code des tables et exactement ce que tu souhaite faire. Parce que le on ne comprend pas le rapport avec le sujet d'origine :)


@+
Il en faut peu pour être heureux ......