suede Posté 11 Janvier 2007 Posté 11 Janvier 2007 Bonjour J'ai trois tables qui ont la structure suivante `photo` `id_photo` smallint(5) unsigned NOT NULL auto_increment, `nom_fichier` varchar(50) NOT NULL default '', `id_pays` smallint(6) NOT NULL default '0', `nom_auteur` varchar(50) NOT NULL default '', `compteur` smallint(5) NOT NULL default '0', `vote` smallint(5) NOT NULL default '0', `date` date NOT NULL default '0000-00-00', `ratio` decimal(4,2) NOT NULL default '1.00', `photo_com` `id_photo` smallint(5) unsigned NOT NULL default '0', `langue` char(3) NOT NULL default '', `alt` varchar(127) NOT NULL default 'photo de suede - photo of sweden', `name` varchar(63) NOT NULL default 'sweden', `titre` varchar(128) NOT NULL default '', `sous_titre` varchar(128) NOT NULL default '', `comment` text NOT NULL, `recherche` enum('oui','non') NOT NULL default 'oui', `traducteur` varchar(127) NOT NULL default 'François Lambert', `urltraducteur` varchar(127) NOT NULL default 'http://www.photos-suede.com/', `traducteuremail` varchar(127) NOT NULL default '', `lienphoto` `id_photo` smallint(5) unsigned NOT NULL default '0', `id_theme` smallint(5) unsigned NOT NULL default '0', `ordre_aff` tinyint(3) NOT NULL default '127', La premiere table, photo, me stocke les infos sur la photo La deuxieme table, photo_com, me stocke les commentaires dans les différentes langues La troisieme table, lienphoto, me stocke la présence de la photo dans une ou plusieurs catégories thématiques. Je souhaite récupérer - Les enregistrements de la table photo (uniquement le champ nom_fichier) - Les enregistrements de la table photo_com pour lesquels langue=une langue donnée (prenons comme example langue='fr') + pour toutes photos étant dans une certaines catégories par exemple, id_theme=41. Pour l'instant, je fais cela en plusieurs requetes : - select des id_photo dans lienphoto pour lesquels id_photo=41 Parcourt en boucle du résultat et récupération des données dans les autres tables. Donc, une requete en plus par photo... En gros, ce que je veux faire. SELECT photo.nom_fichier, photo_com.id_photo .....etc.... photo_com.comment FROM photo, photo_com, lienphoto WHERE photo.id_photo=photo_com.id_photo=lienphoto.id_photo AND photo_com.langue='fr' AND lienphoto.id_theme=41 Bon, ca ne marche pas et ca m'étonne pas. Il faudrait sans doute joindre les tables quelque part... Si quelqu'un sait faire ? Merci d'avance François
Bourinho Posté 11 Janvier 2007 Posté 11 Janvier 2007 (modifié) Et si tu essaies de décomposer photo.id_photo=photo_com.id_photo=lienphoto.id_photo Ca donnerait : SELECT photo.nom_fichier, photo_com.id_photo .....etc.... photo_com.commentFROM photo, photo_com, lienphotoWHERE photo.id_photo=photo_com.id_photo AND photo.id_photo=lienphoto.id_photo AND photo_com.langue='fr' AND lienphoto.id_theme=41 C'est sans garantie, mais ça ne mange pas de pain! PS : Si tu pouvais citer le message d'erreur qui t'es donné, ça pourrait nous aider à... t'aider (c'est pas très heureux, mais je n'ai jamais dit que j'étais un poète!) Modifié 11 Janvier 2007 par Bourinho
suede Posté 11 Janvier 2007 Auteur Posté 11 Janvier 2007 ca marche, merci ;-) Mais je pensais qu'il fallait passer par des cauchemars de Joint left machin chose ;-) Ca sert à quoi les jointures ? Merci
beal2912 Posté 12 Janvier 2007 Posté 12 Janvier 2007 Ce que tu fais sont déjà des jointures : photo.id_photo=photo_com.id_photo l'attribut JOIN LEFT (et autre) permet une optimisation (enfin c'est ce que j'ai compris) de ces jointures dans ta requête, et donc de gagner en performance.
suede Posté 12 Janvier 2007 Auteur Posté 12 Janvier 2007 donc en gros SELECT photo.nom_fichier, photo_com.id_photo, photo_com.alt, photo_com.titre, photo_com.sous_titre, photo_com.comment FROM photo, photo_com, lienphoto WHERE photo.id_photo = photo_com.id_photo AND photo.id_photo = lienphoto.id_photo AND photo_com.langue = 'de' AND lienphoto.id_theme = 104 est équivalent à SELECT photo.nom_fichier, photo_com.id_photo, photo_com.alt, photo_com.titre, photo_com.sous_titre, photo_com.comment FROM photoLEFT JOIN lienphoto using (id_photo)LEFT JOIN photo_com using (id_photo)WHERE photo_com.langue = 'de' AND lienphoto.id_theme = 104 Par contre, je pensais que cette derniere requete me ressortirait des réponses même si il n'y a pas de d'enregistrement dans les tables photo_com et lienphoto à condition qu'il y en ait dans la table photo. Mon probleme: la table photo est la table des traductions -> les langues sv, fr et en sont completes. Mais la langue "de" est incomplete -> certaines id_photo n'ont pas de langue de. Je voudrais pouvoir récupérer le champs photo.nom_fichier correspdonat à lienphoto.id_theme = 104 (il n'y a pas de langue dans la table photo) et avoir NULL pour les autres. François
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant