Sarc Posté 29 Octobre 2009 Posté 29 Octobre 2009 Bonjour à tous, J'ai une requête qui sélectionne un certain nombre d'objets, et j'aimerais avoir pour chacun de ces objets les 5 derniers attributs (stockés dans une autre table)... Il faut prendre en compte que pour chacun de ces objets, il est possible qu'il y ait un très grand nombre d'attributs : ce n'est pas acceptable de tous les sélectionner avec un LEFT JOIN (code 1). J'aimerais également éviter de faire une boucle sur les objets, et de faire une requête SQL pour chacun de ces objets... :/ Code 1 : SELECT a.var, d.nomFROM objets aLEFT JOIN attributs d ON a.id = d.idobjet J'aimerais si possible limiter le nombre de résultats différents de LEFT JOIN... Le moteur SQL doit savoir le faire, mais je sais pas s'ils ont prévu une commande pour le faire. Un LIMIT interne serait idéal. Mais bon, je n'y crois pas trop... J'ai vu que dans d'autres langages de BDD, il était possible de faire des sous-requêtes à l'intérieur du LEFT JOIN, mais ça ne marche pas en SQL. Avez-vous déjà été confronté à ce genre de situation épineuse ?
jcaron Posté 29 Octobre 2009 Posté 29 Octobre 2009 Un truc de ce genre peut-être? SELECT a.var, d.nomFROM objets aLEFT JOIN attributs d ON a.id = d.idobjet WHERE d.id IN (SELECT id FROM attributs WHERE idobjet=a.id ORDER BY whatever LIMIT 5) Jacques.
Sarc Posté 1 Novembre 2009 Auteur Posté 1 Novembre 2009 Bonjour, Merci pour ta réponse et excuse-moi du temps de la mienne ; j'ai été un peu speed cette semaine, pas eu le temps de regarder de ce côté-là. #1235 - This version of MySQL doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery' Au moins, il est très clair : il va falloir que je fasse autrement... J'ai bien une idée pour décharger l'appel à cette page au détriment de celles où on écrit les attributs (grâce à l'ajout d'une colonne supplémentaire...). Mais bon, j'arrête pas de tomber sur des choses que je trouve moi-même sales sur ce site, ça va finir par m'agacer.
jcaron Posté 1 Novembre 2009 Posté 1 Novembre 2009 Il doit pas être tout jeune ton mysql, les subqueries sont supportées depuis la 4.1... Il serait peut-être temps de faire un petit upgrade :-) Jacques.
Sarc Posté 1 Novembre 2009 Auteur Posté 1 Novembre 2009 D'après le message d'erreur, ce ne sont pas les subqueries qui sont en défaut dans la version de MySql, mais l'utilisation des LIMIT et des IN à l'intérieur d'une sous-requête... Version du serveur: 5.1.37-1ubuntu5
jcaron Posté 1 Novembre 2009 Posté 1 Novembre 2009 Ah effectivement j'avais lu un peu vite. Je ne savais pas qu'il y avait encore ce genre de limites dans mysql, moi j'utilise postgresql qui n'a pas ce genre de problème... Mais dans ce cas je ne sais pas trop comment tu peux faire en SQL pur :-( Jacques.
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant