RV2931
Messages postés185Date d'inscriptionsamedi 21 mai 2005StatutMembreDernière intervention16 juillet 2016
-
6 oct. 2011 à 20:36
galled
Messages postés41Date d'inscriptionvendredi 30 octobre 2009StatutMembreDernière intervention13 décembre 2012
-
7 oct. 2011 à 21:56
Bonjour,
J'aurai besoin de faire un truc un peu compliqué avec 2,3 tables. Je ne vois pas trop comment car apparemment, Firebird ne gère pas les UPDATE multitables.
Ma base concerne un aéroport.
Il y a l'environnement, c'est à dire l'aéroport dans lequel on se trouve, LFPG pour Paris par exemple. Il y a des avions avec une type avions (B777 pou un boeing 777...) et un plan de vol appelé "Flightplan" qui contient toute les information concernant le vol, notamment son poids.
Un type d'avions donné à un poids à vide, un poids maximum au décollage MAXTO (pour take off) et un poids maximum à l'atterissage MAXLG (Pour landing)
J'ai donc 3 tables ENVIRONMENTS, FLIGHTPLANS, AIRCRAFTS
ENVIRONMENTS contient l'information une clé ENVIRONMENTS.ID associé au nom textuel de l'environnement ENVIRONMENTS.NAME
FLIGHTPLANS contient le type d'avion TYPE et le poids donné arbitrairement à un avion (c'est un simulateur) (clé, index ID unique du plan de vol)
AIRCRAFTS contient toutes les informations physiques et limites, normes et autres pour chaque type TYPE d'avions pouvant être utilisés dans les FLIGHTPLANS. (clé, index ID unique du type avion)
FLIGHTPLANS.TYPE étant forcément contenu dans la liste des AIRCRAFTS.ID
FLIGHTPLANS.ENV étant l'index de l'environnement dont le nom textuel est donné par ENVIRONMENTS.NAME avec FLIGHTPLANS.ENV = ENVIRONMENTS.ID
FLIGHTPLAN.WEIGHT étant le poids de l'avion en pourcentage de la différence WEIGHTMAXTO - WEIGHTEMPTY
Ce qui veut dire que WEIGHT 0> WEIGHTEMPTY et WEIGHT = 100 => WEIGHTMAXTO
FLIGHTPLAN.ADEP étant l'aéroport de départ, égal à ENVIRONMENTS.NAME si c'est un départ.
FLIGHTPLAN.ADES étant l'aéroport de desctination, égal à ENVIRONMENTS.NAME si c'est une arrivée.
AIRCRAFTS.WEIGHTEMPTY,AIRCRAFTS.WEIGHTMAXLG et AIRCRAFTS.WEIGHTMAXTO étant respectivement le poids à vide, maximum à l'atterrissage et maximum au décollage.
Mon but est d'affecter des poids cohérents, aléatoirement compris entre WEIGHTEMPTY et WEIGHTMAXTO pour un vol au départ (FLIGHTPLAN.ADES = ENVIRONMENTS.NAME)
et d'affecter des poids cohérents, aléatoirement compris entre WEIGHTEMPTY et WEIGHTMAXLG pour un vol à l'arrivée.
Pour l'instant, j'ai 3 requêtes :
/* Met un poids compris entre 70 et 100% pour les départs. */
UPDATE FLIGHTPLANS
SET WEIGHT = cast(70+RAND()*30 AS integer)
WHERE FLIGHTPLANS.ID IN (
SELECT FLIGHTPLANS.ID
FROM FLIGHTPLANS
JOIN AIRCRAFTS
ON FLIGHTPLANS.TYPE = AIRCRAFTS.ID
JOIN ENVIRONMENTS
ON FLIGHTPLANS.ENV = ENVIRONMENTS.ID
WHERE FLIGHTPLANS.ADEP = ENVIRONMENTS.NAME
}
/* Met un poids compris entre 10 et 50% pour les arrivées. */
UPDATE FLIGHTPLANS
SET WEIGHT cast(10+RAND()*40 AS integer) /*> valeurs arbitraires, comment faire pour récupérer le WEIGHTMAXLG de AIRCRAFTS */
WHERE FLIGHTPLANS.ID IN (
SELECT FLIGHTPLANS.ID
FROM FLIGHTPLANS
JOIN AIRCRAFTS
ON FLIGHTPLANS.TYPE = AIRCRAFTS.ID
JOIN ENVIRONMENTS
ON FLIGHTPLANS.ENV = ENVIRONMENTS.ID
WHERE FLIGHTPLANS.ADES = ENVIRONMENTS.NAME
}
Mon but serait plutôt que d'allouer une valeur aléatoire comprise entre deux bornés MIN (10%) MAX (50%) arbitraires, je voudrais affecter une valeur comprise entre MIN (10%) et MAX = la valeur de WEIGHTMAXLG du type de l'avion concerné par le plan de vol.
J'ai essayé des
UPDATE FLIGHTPLANS
JOIN AIRCRAFTS
ON FLIGHTPLANS.TYPE = AIRCRAFTS.ID
JOIN ENVIRONMENTS
ON FLIGHTPLANS.ENV = ENVIRONMENTS.ID
SET WEIGHT = cast(10+RAND()*(WEIGHTMAXLG - 10) AS integer)
WHERE FLIGHTPLANS.ADES = ENVIRONMENTS.NAME
et différentes variante que j'ai pu trouver sur les forums, mais rien en semble fonctionner. Pour celui-ci, l'erreur est Dynamic SQL error code = -104 - Token unknown - line 2, column 1 - JOIN Could not prepare statement
Je fais que commencer le SQL pour info...
Merci d'avoir lu
Hervé
L'intelligence est la chose la mieux répartie chez l'homme, car quoi qu'il en soit pourvu, il a toujours l'impression d'en avoir assez. "Descartes"