requêtes sur plusieurs tables SQL jointures

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : requêtes sur plusieurs tables SQL jointures

Re: requêtes sur plusieurs tables SQL jointures

par moogli » 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 :)


@+

Re: requêtes sur plusieurs tables SQL jointures

par balatus » 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 ?

Re: requêtes sur plusieurs tables SQL jointures

par aspkiddy » 15 juin 2011, 14:45

Super devlop78,

Merci les informations sur les "alias"

Bonne journée

Re: requêtes sur plusieurs tables SQL jointures

par devlop78 » 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.

Re: requêtes sur plusieurs tables SQL jointures

par aspkiddy » 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

Re: requêtes sur plusieurs tables SQL jointures

par devlop78 » 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.

requêtes sur plusieurs tables SQL jointures

par aspkiddy » 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: