[SQL] Nom de table dynamique? - 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 : [SQL] Nom de table dynamique? (/showthread.php?tid=3210) Pages :
1
2
|
[SQL] Nom de table dynamique? - Argorate - 24-10-2008 Bonsoir, Voilà mes petits soucis: j'ai un problème d'optimisation. Je connais la solution a mon problème, mais elle ne me plait guère, donc j'en cherche une plus optimisé; pour du SQL dans php. J'ai une table : table1(id,type) Ainsi que toto_1(id, ...) toto_2(id,...) toto_3(id,...) ... Il me faut donc jointer sur l'id. Seulement le nom de cette table est toto_X où X est un numéro qui correspond au type. Autrement dit ma solution actuel serait de faire une requête où je récupère le type en premier et où je place ça dans la variable $type admettons, puis une deuxième requête où je ferais un truc du style: SELECT * FROM table1, toto_$type WHERE table1.id = toto_$type.id Pour ceux qui ont suivit, le problème est donc que je me vois obligé de faire deux requêtes, hors lorsque je n'avais pas différent type, je n'avais qu'une seule table fixe (toto), donc qu'une seule requête avec une simple jointure. J'aimerais donc savoir s’il y a moyen de feinter pour tous faire en une requête ou pas... Merci. RE: [SQL]Nom de table dynamique? - Sephi-Chan - 24-10-2008 Bonsoir, Peut-être s'agit-il là d'un problème de modélisation ? Peux-tu nous expliquer le contexte d'utilisation ? À priori, si l'identifiant qui suffixe représente un type, ne peut-il pas être représenté par une colonne dans une table unique ? Sinon, n'est-il pas possible de récupérer le type dans une variable SQL et l'utiliser comme tu le fais actuellement avec ta variable PHP. Sephi-Chan RE: [SQL]Nom de table dynamique? - Argorate - 24-10-2008 "l'identifiant qui suffixe représente un type" Non... j'ai peut etre mal formulé car en realité il n'y a pas que c'est deux champs dans table1, mais j'ai simplifié. l'id represente l'id d'un jeu php par exemple, et le type est un chiffre (0: medieval, 1: futuriste etc), il n'on pas de lien direct. Comment tu recuperes le type dans une variable SQL qui jouerait dans le FROM? RE: [SQL]Nom de table dynamique? - Sephi-Chan - 24-10-2008 Je te redirige vers la documentation de MySQL qui sera plus efficace que moi pour répondre à ta question. MySQL - Variables utilisateur Sephi-Chan RE: [SQL]Nom de table dynamique? - Nambew - 24-10-2008 Pourquoi ne pas donner les champs que contient tes tables, vu que comme Sephi, je crois qu'il s'agit de erreur de modélisation vu que je ne vois pas l'intérêt de faire des tables dynamiques en SQL. RE: [SQL]Nom de table dynamique? - Argorate - 24-10-2008 c'est plutot simple pourtant, j'ai une table qui est la map pour mes objets de mon jeu, je met donc le x,y,id,type puis pour allez chercher les info relative a l'objet il me faut d'une part allez prendre les champs commun dans une table, et la jointer aux champs spécifique du type d'objet (comme un heritage de classe mais en BDD)... Si vous avez une meillieur conception, dites moi le RE: [SQL]Nom de table dynamique? - Nambew - 25-10-2008 Si c'est de l'héritage que tu cherches à faire, j'ai trouvé cette article sur developpez.com. Par contre, je ne crois pas que ça va régler ton problème puisque tu sembles vouloir récupérer les données de l'enfant à partir du parent. http://sqlpro.developpez.com/cours/modelisation/heritage/ Si je représente ton problème en programmation dans un environnement typé. Personne ( nom ) et Client qui hérite de Personne. Le trace va me retourner une erreur comme quoi la propriété noClient n'existe pas dans la classe Personne, pourtant c'est bien un client. C'est exactement ce que t'essaie de faire, c'est logique de ne pas pouvoir récupérer les informations de la classe enfant à partir de la classe parent si on ignore le type de l'enfant. Même PostgreSQL qui supporte l'héritage n'est pas en mesure de faire ce genre de jointure implicitement. Code PHP :
RE: [SQL]Nom de table dynamique? - Argorate - 25-10-2008 je ne veux pas de code, juste du SQL en faite. Le type on le connais, c'est juste qu'en fonction de celui-ci le FROM doit varier. Es-ce possible donc, ou dois-je le faire en plusieurs fois? En resumer, soit j'ai deux requetes d'une ligne, mais le il y a une conection a la bdd pour els deux requetes et sa cout en temps d'execution, soit on trouv le moyen de le faire en une requete.. RE: [SQL]Nom de table dynamique? - Nambew - 25-10-2008 Le type est inconnu, si tu connaitrais le type que tu veux récupérer tu pourrais récupérer les informations de la table enfant et faire une jointure sur la table parent. Je ne crois pas que tu puisses tant sortir en bas de 2 requêtes SQL. RE: [SQL]Nom de table dynamique? - pascal - 25-10-2008 et via une procédure stockée ? ça permettrait de se connecter une fois, traiter toute la logique en SQL et renvoyer le résultat. A+ Pascal |