Requete php sur 2 tables

Requete php sur 2 tables - PHP - Programmation

Marsh Posté le 04-07-2009 à 16:13:45    

Bonjour,
 
J'ai un petit souci de requete.
 
J'ai 2 tables.
 
Table commentaires avec les champs : image_id, commentaire_auteur, commentaire_message, commentaire_visible, commentaire_id
Table images avec les champs : image_id, image_nom
 
Je voudrais extraire :  image_id, commentaire_auteur, commentaire_message, image_nom
 
avec comme critère commentaire_visible="1"
 
J'ai commencé comme ça  
$requete="SELECT * FROM commentaires WHERE commentaire_visible='1' ORDER BY commentaire_id desc LIMIT 12";
 
et ça marche mais il faut ensuite que j'extraie image_nom
 
Je crois qu'il faut une jointure mais je ne sais pas comment l'écrire dans un cas comme ça

Reply

Marsh Posté le 04-07-2009 à 16:13:45   

Reply

Marsh Posté le 04-07-2009 à 17:18:49    

Bonjour,
 
Je te conseils de faire une jointure =>
 
SELECT images.img_id AS id_img, commentaire.commentaire_auteur AS com_auteur, commentaire.commentaire_message AS com_msg, image.image_nom  AS img_nom
FROM commentaires AS commentaire
LEFT JOIN images AS image
ON commentaire.image_id = image.image_id
WHERE commentaire.commentaire_visible='1'
ORDER BY commentaire.commentaire_id desc
LIMIT 12
 
-------------------
LEFT JOIN = RIGHT JOIN = JOIN = INNER JOIN
 
Bon certes il y a des particularités pour l''INNER JOIN" si tu fais des sous-requêtes (requêtes imbriquées ou si tu préfères des requête dans des requêtes).
-------------------
 
Autre solution de jointure ==>
SELECT images.img_id AS id_img, commentaire.commentaire_auteur AS com_auteur, commentaire.commentaire_message AS com_msg, image.image_nom  AS img_nom
FROM commentaires AS commentaire, images AS image
WHERE commentaire.image_id = image.image_id

AND commentaire.commentaire_visible='1'
ORDER BY commentaire.commentaire_id desc
LIMIT 12
 
-------------------
 
J'ai utilisé des alias ("AS" ) dans le "SELECT" et "FROM" cela est facultatif.
Dans le "SELECT" j'ai précisé le nom de la table et le nom du champ, cela évite des problèmes si tu as un ou plusieurs champs ayant le même nom (enlève l'ambiguïté).
Dans tes 2 table le champ "image_id" est concerné mais dans ta situation cela n'a aucun effet car c'est un champs qui sert de relation.

Reply

Marsh Posté le 04-07-2009 à 17:24:09    


 
 select image_id,c.........  from commentaires as a,images as b  where a.commentaire_visible=1 and b.image_id = a.image_id ;

Reply

Marsh Posté le 04-07-2009 à 17:27:46    

desolé on a du taper la reponse en meme temps

Reply

Marsh Posté le 04-07-2009 à 18:00:15    

merci beaucoup ! j'ai pris la première méthode. ça marche nickel.

Reply

Marsh Posté le 04-07-2009 à 19:41:24    

jean-michel-nux a écrit :

desolé on a du taper la reponse en meme temps


 
Ce n'est pas grave mieux vaut 2 réponses qu'aucune :).

Reply

Marsh Posté le 04-07-2009 à 19:59:43    

Citation :

LEFT JOIN != RIGHT JOIN != JOIN != INNER JOIN


 
Merci de ne pas écrire ce genre de "passe droit" à un débutant qui finira inévitablement par se tirer une balle dans le pied


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 06-07-2009 à 21:54:07    

Je préconise la première solution.  
 
Elle est beaucoup plus rapide à exécuter et beaucoup plus clair quand tu as beaucoup de liaisons.

Reply

Sujets relatifs:

Leave a Replay

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