Requete sur deux tables !

Requete sur deux tables ! - SQL/NoSQL - Programmation

Marsh Posté le 04-11-2007 à 20:04:43    

J'ai un petit probleme avec une requete Mysql...
Je voudrais sélectionner une photo dans ma base de donnée et afficher les infos sur la photo ET sur l'utilisateur qui a mis cette photo en ligne !
 
J'ai une variable php ($img) qui est le nom de la photo dans la base de données (photos.nom).
Dans la table photos, il y a un champ user_id (photos.user_id) qui est l'id de l'user qui a mis la photo en ligne.
Je voudrais récuperer des infos de la photo (dans la table photos) et des infos de l'user (dans la table user).
 
Ma requete :  
$req = "SELECT p.nom, p.dimension, u.nom_artiste, u.prenom, u.nom FROM photos p, user u WHERE p.nom = ".$img;
 
Avec cette requete, il y a autant de lignes (dans mes resultats) qu'il n'y a d'users... !?
Or, les noms des photos sont uniques...
 
Ca doit être très con... ! Mais je bugge un peu !  :whistle:  
 
(°-°)

Reply

Marsh Posté le 04-11-2007 à 20:04:43   

Reply

Marsh Posté le 04-11-2007 à 21:06:56    

SELECT p.nom, p.dimension, u.nom_artiste, u.prenom, u.nom  
FROM photos p, user u  
WHERE p.user_id = u.id
AND p.nom = ".$img;

Reply

Marsh Posté le 05-11-2007 à 00:07:12    

la même chose en utilisant la syntaxe verbeuse des jointures (et ainsi on pige mieux ce qu'il se passe) :

Code :
  1. SELECT p.nom, p.dimension, u_nom_artise, u.prenom, u.nom
  2. FROM photos p
  3. INNER JOIN user u ON u.id = p.user_id
  4. WHERE p.nom = $img

Message cité 1 fois
Message édité par MagicBuzz le 05-11-2007 à 00:07:56
Reply

Marsh Posté le 05-11-2007 à 15:27:34    

Je pensais vraiment avoir essayé ça
 
SELECT p.nom, p.dimension, u.nom_artiste, u.prenom, u.nom  
FROM photos p, user u  
WHERE p.user_id = u.id
AND p.nom = ".$img;
 
mais j'avais peut-être interverti :
 
WHERE p.nom = ".$img;
AND p.user_id = u.id
 
Ca change tout ?

Reply

Marsh Posté le 05-11-2007 à 17:08:35    

non ça change rien. vu que c'est un AND booléen, ça l'ordre n'a aucune importance.

Reply

Marsh Posté le 05-11-2007 à 21:11:46    

MagicBuzz a écrit :

la même chose en utilisant la syntaxe verbeuse des jointures (et ainsi on pige mieux ce qu'il se passe) :

Code :
  1. SELECT p.nom, p.dimension, u_nom_artise, u.prenom, u.nom
  2. FROM photos p
  3. INNER JOIN user u ON u.id = p.user_id
  4. WHERE p.nom = $img



 
attention que la clause INNER JOIN n'existe pas sur tous les SGBD (exemple, il faut avoir la version ORACLE 9i Release 2 pour avoir cette clause) et oracle n'a toujours pas la clause LEFT OUTER JOIN. Donc à utiliser avec modération, surtout quand on est pas certain de la version qu'on utilisera en production (ça m'est déjà arrivé :D).  
 
Sinon, généralement, la clause INNER JOIN est plus performante puisque la jointure est faite avant le produit cartésien complet sur toute les tables. Donc si on a l'occasion de l'utiliser, vaut mieux le faire pour des raisons de performances et d'occupation mémoire.

Reply

Marsh Posté le 06-11-2007 à 12:57:52    

Citation :

non ça change rien. vu que c'est un AND booléen, ça l'ordre n'a aucune importance.


 
Je me disais aussi mais j'étais sûr d'avoir essayé...  :heink:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed