Page 1 sur 1
requêtes sur plusieurs tables SQL jointures
Posté : 13 juin 2011, 23:13
par aspkiddy
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:
Re: requêtes sur plusieurs tables SQL jointures
Posté : 14 juin 2011, 00:56
par devlop78
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.
Re: requêtes sur plusieurs tables SQL jointures
Posté : 14 juin 2011, 15:12
par aspkiddy
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
Re: requêtes sur plusieurs tables SQL jointures
Posté : 14 juin 2011, 23:56
par devlop78
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.
Re: requêtes sur plusieurs tables SQL jointures
Posté : 15 juin 2011, 14:45
par aspkiddy
Super devlop78,
Merci les informations sur les "alias"
Bonne journée
Re: requêtes sur plusieurs tables SQL jointures
Posté : 25 sept. 2011, 06:47
par balatus
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 ?
Re: requêtes sur plusieurs tables SQL jointures
Posté : 27 sept. 2011, 00:11
par moogli
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
@+