Fonction de calcul php

AMARI -  
 AMARI -
Pour sélectionner les 2 variables de la fonction je dois utiliser 3 tables:
scenario_parametres_physique
paramertes_hydros
scenario_sequence_annee
ma fonction normalement comme ça:
X= taux_concentration* précipitation
et ma requête en php ci celle ci :
$sql = 'select(v1.taux_concentration*p1.precipitation) as total
from parametres_hydro as p1,scenario_parametres_physiques as v1 INNER JOIN scenario_sequence_annee ON scenario_parametres_physiques.id_scenario= scenario_sequence_annee.id_scenario
INNER JOIN parametres_hydro ON scenario_sequence_annee.annee=parametres_hydro.annee
WHERE scenario_parametres_physiques.id_scenario= scenario_sequence_annee.id_scenario';
$req = $db->query($sql);

while($row = mysqli_fetch_array($req)){
$s1[]= $row['total'] ;


}

for ( $i=1 ; $i<13 ; $i++) {


$h1[]=$s1[$i];

}
il m'affiche comme erreur , Erreur SQL
quelqu'un de vous peux me corriger la requête svp .merci
A voir également:

26 réponses

jeremy.s Messages postés 1226 Date d'inscription   Statut Membre Dernière intervention   79
 
Salut !

A quoi te sers scenario_sequence_annee ?
On ne nome pas une table avec un "as" dans le from, c'est juste [nom de la table] [nom que tu donnes].
Ensuite tu "déclare" parametres_hydro comme p1 et scenario_parametres_physiques comme v1, mais par contre tu ne fais rien de scenario_sequance_annee tu ne lui donne pas de nom.


Syntaxe plus simple pour ce genre de requete :

SELECT a.champ1, b.champ3, c.champ6
FROM table1 a, table2 b, table3 c
WHERE a.id = b.id
AND b.id = c.id
AND a.id = c.id


Si tu as une jointure donc deux tables, tu as une condition dans le where.
Si par contre tu as trois tables, il faut les joindre les trois ensemble donc 3 conditions



0
AMARI
 
Merci jeremy.s, la table scenario_sequence_annee je l'utilise comme lien entre le deux autre tables pour avoir les calcules ds chaque scénario
par contre j'ai suivie ta requête et toujours j'ai le même erreur
$sql='select(v1.taux_concentration*p1.precipitation)
from scenario_parametres_physiques v1 scenario_sequence_annee S1, parametres_hydro p1
WHERE v1.id_scenario=S1.id_scenario
AND p1.annee= S1.annee'
PS: je veux juste selectionner deux champs de table scenario_parametres_physiqueset parametres_hydros , la scenario_sequence_anneee je l'utilise pour la jointure entre le 2 autres tables
je te donner lastructure de mes 3 tables
scenario_parametres_physiques (id_scenario , taux _concentration, ..)
scenario_sequence_anneee (id_scenario, annee, num_annee)
parametres_hydros (annee, mois , percipitation)
tu peux m'aider de faire la requête correcte merci d'avance
0
jeremy.s Messages postés 1226 Date d'inscription   Statut Membre Dernière intervention   79
 
Si tu déclares trois tables, tu es obligé de les joindre, c'est comme ca.
Donc déjà première erreur de syntaxe :
FROM scenario_parametres_physiques v1s scenario_sequence_annee S1, parametres_hydro p1

Ensuite dans ton WHERE il te manque une jointure entre v1 et s1
0
AMARI
 
en fait comme je t'ai déjà dit la table scenario_sequence_annee pour lier entre les 2 tables F scenario_parametres_physiques et parametres_hydro
j'en ai un lien entre scenario_sequence_annee etscenario_parametres_physiques c'est à dire entre S1 et v1
et un lien entre scenario_sequence_annee et parametres_hydro: entre S1 et p1
et ici j'ai utilisé 2 conditions:
WHERE v1.id_scenario=S1.id_scenario
AND p1.annee= S1.annee'
par contre j'en ai pas un lien entre scenario_parametres_physiques et parametres_hydro v1 et p1
c'est pour ça j'ai pas la 3 émme condition, comment je peux faire ???
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jeremy.s Messages postés 1226 Date d'inscription   Statut Membre Dernière intervention   79
 
Il te faut absolument une jointure entre v1 et p1. Si t'en a pas tu ne peux pas mettre p1 dans ta requete ...
0
AMARI
 
c'est pour ça j'ai utilisé l'INNER JOIN tu peux voir ça dans mon primer message mais j'en ai un erreur SQL je sais pas d'ou il vient
0
jeremy.s Messages postés 1226 Date d'inscription   Statut Membre Dernière intervention   79
 
Dis voir ta requete en francais :)
0
AMARI
 
:) d'accord par contre est ce qu'il y a une solution
0
jeremy.s Messages postés 1226 Date d'inscription   Statut Membre Dernière intervention   79
 
Genre met la structure de tes tables et dis moi ce que tu veux récupéré ;-)
0
AMARI
 
ok :)
alors mes 3 tables sont comme ça :
scenario_parametres_physiques (id_scenario , taux _concentration, ..)
scenario_sequence_anneee (id_scenario, annee, num_annee)
parametres_hydros (annee, mois , percipitation)
je veux récuperer taux_concentration et percipitation pour faire le calcul
et ce calcul il va être en fonction de chaque id-scenraio
de X= taux_concentration * percipitation
0
jeremy.s Messages postés 1226 Date d'inscription   Statut Membre Dernière intervention   79
 
Ok donc :

SELECT a.id_scenario, a.taux_concentration * (
SELECT precipitation FROM scenario_sequence_anne WHERE annee = b.annee
) as calcul
FROM scenario_paramètres_physiques a, paramètres_hydros b
WHERE a.id_scenario = b.id_scenario

Essaye ca
0
AMARI
 
ça marche pas toujours SQL erreur si c'est possible tu me passe ton adresse mail pour que je t'envoie la page avec les tables comme ça tu peux tester mon code sur ton pc Merci
0
jeremy.s Messages postés 1226 Date d'inscription   Statut Membre Dernière intervention   79
 
Nan mais je sais pourquoi, ma requete est bonne, mais le problème c'est que le select précipitation renvois plusieurs valeurs ...
Donc le problème c'est ta table parametre_hydros ... Il te faut une clé primaire dessus sinon c'est pas possible

0
AMARI
 
c'est normal d'voir plusieurs valeurs pour la précipitation par ce que pour chaque année j'en ai 12 valeurs ( 12 mois ) , et pour la table parametre_hydros la clé primaire c'est l'annee pourquoi chez moi ça marche pas :(
0
jeremy.s Messages postés 1226 Date d'inscription   Statut Membre Dernière intervention   79
 
Il faudrait un mois aussi dans scenario_sequence_anneee aussi alors ;-)
0
AMARI
 
mais j'utilise pas le mois dans la table scenario_sequence_anneee , j'en ai pas besoin dans cette table j'ai cherché par tt la solution mais j'arrive pas :(
0
jeremy.s Messages postés 1226 Date d'inscription   Statut Membre Dernière intervention   79
 
Tu veux 12 résultats ? Genre tu veux affiché chaque mois pour une année ?
0
AMARI
 
Bonjour jeremy.s,
oui exactement que je veux
0
jeremy.s Messages postés 1226 Date d'inscription   Statut Membre Dernière intervention   79
 
Ok ok !
Alors je te propose de faire 12 requetes enfaite !

$res = array()

for($i = 1 ; $i <= 12 ; $i++){

$req = $bdd->prepare('SELECT a.id_scenario, a.taux_concentration * (
SELECT precipitation FROM scenario_sequence_anne WHERE annee = b.annee AND mois = :mois
) as calcul
FROM scenario_paramètres_physiques a, paramètres_hydros b
WHERE a.id_scenario = b.id_scenario');
$req->binValue(':mois', $i, PDO::PARAM_STR);
$req->execute() or die(print_r($req->errorInfo()));
$res[] = $req->fetch(PDO::FETCH_ASSOC);

}




0
AMARI
 
en fait j'ai essayé avec ta requête il m'affiche erreur , j'ai essayé avec cette requête dans phpmyadmin
SELECT (
v1.taux_concentration * p1.precipitation
) AS total, p1.Mois AS mois
FROM parametres_hydro AS p1, scenario_parametres_physiques AS v1, scenario_sequence_annee AS v2
WHERE v1.id_scenario = v2.id_scenario
AND p1.annee = v2.annee
GROUP BY v2.id_scenario
ORDER BY v2.num_annee DESC
il m' a affiché
total mois
0 1
2.6 1
4.125 1

comment je peux faire pour avoir les résultat de 12 mois de 1 jusqu'à 12 ?
0