[MySQL]1 ou 2 requêtes pour un "maitre détail" - Version imprimable +- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org) +-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38) +--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51) +--- Sujet : [MySQL]1 ou 2 requêtes pour un "maitre détail" (/showthread.php?tid=4776) Pages :
1
2
|
RE: [MySQL]1 ou 2 requêtes pour un "maitre détail" - Kihmé - 27-04-2010 il ne va pas pouvoir le faire en une requète, car à mon avis il veut un truc comme ça : id / info 1 / info 2 / Info 3 / - ingrédient : quantité - ingrédient : quantité voilà un exemple que j'ai déjà fait pour un projet, on avait des randonnées qui avaient des informations et qui traversaient plusieurs sommets, on voulait lister chaque randonnée et ses sommets, un peu comme là tu veux lister chaque recette et y indiquer chacun de ses ingrédients : Code : declare @code_randonnee int RE: [MySQL]1 ou 2 requêtes pour un "maitre détail" - Roworll - 27-04-2010 Petite(s) remarque(s) Ce code est en SQL Server apparemment. Si on transpose dans un environnement MySQL, la syntaxe sera différente et il est même possible que les curseurs ne soient pas supportés en fonction de la version de MySQL. Ensuite, puisque c'est du code SQL Server, je me permets de rappeler que l'utilisation de curseurs doit être évitée dans la mesure du possible (Best Practice from MS). C'est bien trop gourmand en ressources. (petit lien) Dans l'exemple donné, je pense qu'il aurait été possible de s'en sortir avec l'instruction PIVOT (SQL 2005 & 2008), évitant ainsi ce double curseur. Pour en revenir au sujet original, je rejoindrais cyberbobjr. A vue de nez, je pense que la requête unique sera plus performante mais ça reste à confirmer par un benchmark. La quantité d'information dupliquée sur la table "maître" par la requête jointe peut faire la différence. RE: [MySQL]1 ou 2 requêtes pour un "maitre détail" - Ter Rowan - 27-04-2010 (27-04-2010, 10:52 AM)pascal a écrit :Je n'ai pas été très clair ^^ les volumes que j'annonçais étaient les données en BDD, pas en récupération de données (on en récupèrera 1 le plus souvent voire 4-5 dans les cas exceptionnels je pense) ni même en affichage(26-04-2010, 07:37 PM)Ter Rowan a écrit : Info complémentaire pour le contexte (27-04-2010, 03:09 PM)Roworll a écrit : Pour en revenir au sujet original, je rejoindrais cyberbobjr. A vue de nez, je pense que la requête unique sera plus performante mais ça reste à confirmer par un benchmark. je pense que les données dupliquées seront de 5 entiers au maximum pour la table maître (et comme un enregistrement maitre doit donner entre 5 et 10 enregistrements détail, on dupliquera d'autant) Je vais essayer les deux méthodes mais je ne sais pas si je verrais grand chose :/ en tout cas merci pour vos infos RE: [MySQL]1 ou 2 requêtes pour un "maitre détail" - pascal - 27-04-2010 Dans ce cas une seule requête, sans hésiter. ++ Pascal RE: [MySQL]1 ou 2 requêtes pour un "maitre détail" - Sephi-Chan - 27-04-2010 C'est vrai qu'en dehors du cas d'un ORM, tu peux tout à fait faire ça facilement en 1 requête. Sephi-Chan RE: [MySQL]1 ou 2 requêtes pour un "maitre détail" - Kihmé - 27-04-2010 (27-04-2010, 03:09 PM)Roworll a écrit : Petite(s) remarque(s) oui le code est bien du sql server mais je l'ai mis à titre d'exemple de ce qu'est un curseur. Après pour le reste si c'est une mauvaise utilisation je n'en ai aucune idée donc si tu le dis c'est surement vrais RE: [MySQL]1 ou 2 requêtes pour un "maitre détail" - NicoMSEvent - 28-04-2010 Le choix est cornélien... A mon avis, c'est se chatouiller pour se faire rire, les données sont tellement faibles, et les calculs tellement simples... ça changera que de quelques millisecondes le chargement de ta page. En orienté objet, tu aurais deux requêtes distinctes (récupération de l'objet "recette" et récupération des objets "ingrédients"), voir même trois si tu y ajoutes des relations spécifiques ( recette -> recette_utilise_x <- ingrédient ) ce qui te permettrait de récupérer un type d'ingrédient pour plusieurs recettes (exemple : un ingrédient composé : un roux, ou une pâte brisée, ...), avec la quantité qui pourrait changer d'après la recette. Ca permettrait certainement de limiter ton nombre d'ingrédient a quelques dizaines au lieu d'en avoir des milliers D'un point de vue conceptuel, je préfèrerais cette dernière solution, qui utilise 3 requêtes RE: [MySQL]1 ou 2 requêtes pour un "maitre détail" - Sephi-Chan - 28-04-2010 Nico, même avec une cardinalité pour chaque ingrédient, ça se fait très proprement en 2 requêtes : la première pour la recette, la deuxième sur la table de liaison avec une jointure sur la table des ingrédients. Sephi-Chan RE: [MySQL]1 ou 2 requêtes pour un "maitre détail" - NicoMSEvent - 28-04-2010 1ere requete : je charge toutes les recettes 2eme requete : je charge tous les ingrédients 3eme requete (la plus grosse, surtout si on prends toutes les lignes, mais dans mon cas, je ne prends que ce qui m'intéresse -> juste quelques dizaines de lignes maximum) : je prends les recettes que je souhaite afficher (petite clause where), en considérant ça comme un multigraphe, et je crée des liens pondérés (ici les quantités d'ingrédients). Je ne vois pas comme faire plus simple, et plus économe en mémoire, vu que même si mon ingrédient apparait 100x, il n'est qu'une seule fois en mémoire (un seul objet). (contrairement a si je lie ma requete sur la table intermédiaire, et ingrédients) |