Fonction de calcul php
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
26 réponses
La problématique porte sur l’extraction de deux variables issues de trois tables pour calculer X = taux_concentration × précipitation, en liaisonnant scenario_parametres_physiques, scenario_sequence_annee et parametres_hydros. Des erreurs fréquentes apparaissent autour des alias, des jointures et des conditions, notamment l’absence de ON entre les tables et une clause FROM mal structurée initiale. Des réponses suggèrent d’utiliser des jointures explicites avec alias cohérents et de relier les tables par id_scenario, annee et éventuellement mois, afin d’éviter les résultats multiples et les erreurs de syntaxe. En cas de besoin, préciser les clés primaires et le mapping temporel permet d’obtenir les valeurs mensuelles pour chaque scénario et d’éviter les doublons potentiels.
-
d'accord merci beaucoup :) c'est gentil de ta part
-
Si jamais t'as besoin d'aide jsuis dispo toute l'aprèm :)
-
merci je vais essayer , espérant bien que ça marche
-
Tu n'y arriveras pas, je pense pas que ce soit possible avec tes tables actuelles.
Ta seule solution c'est ce que je t'ai donné avant.
Donc reprend ce que je t'ai donné et ca devrait allé :)
Mon code était pas parfait, faut que tu l'adapte pour ta base de données ;-)
-
Parse error: syntax error, unexpected T_VARIABLE in C:\wamp\www\modelehydro\calcul\Evapsec.php on line 6
mais la requête que je viens le t'envoyer ça fonctionne juste je veux savoir comment je peux faire pour avoir les résultats de 12 Mois -
Quelle était l'erreur exact ?
Essaye ca :
'SELECT a.id_scenario, a.taux_concentration * (
SELECT precipitation FROM scenario_sequence_anne WHERE annee = b.annee AND mois = 1
) as calcul
FROM scenario_paramètres_physiques a, paramètres_hydros b
WHERE a.id_scenario = b.id_scenario
-
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 ? -
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);
}
-
Bonjour jeremy.s,
oui exactement que je veux -
Tu veux 12 résultats ? Genre tu veux affiché chaque mois pour une année ?
-
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 :(
-
Il faudrait un mois aussi dans scenario_sequence_anneee aussi alors ;-)
-
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 :(
-
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
-
ç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
-
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
-
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 -
Genre met la structure de tes tables et dis moi ce que tu veux récupéré ;-)
-
:) d'accord par contre est ce qu'il y a une solution
-
Dis voir ta requete en francais :)
- 1
- 2