JeuWeb - Crée ton jeu par navigateur
[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. Smile
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 Big Grin


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 :
<?php 
var client:Client = new Client();

client.nom = "toto";
client.noClient = "001";

var
personne:Personne = client;

trace( personne.noClient );



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