Fonction de calcul php

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

26 réponses

Résumé de la discussion

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.

Bobot (l’IA à votre service)
  1. d'accord merci beaucoup :) c'est gentil de ta part
    0
    1. Si jamais t'as besoin d'aide jsuis dispo toute l'aprèm :)
      0
      1. merci je vais essayer , espérant bien que ça marche
        0
        1. 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 ;-)
          0
          1. 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
            0
            1. 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
              0
              1. 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
                1. 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
                  1. Bonjour jeremy.s,
                    oui exactement que je veux
                    0
                    1. Tu veux 12 résultats ? Genre tu veux affiché chaque mois pour une année ?
                      0
                      1. 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
                        1. Il faudrait un mois aussi dans scenario_sequence_anneee aussi alors ;-)
                          0
                          1. 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
                            1. 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
                              1. ç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
                                1. 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
                                  1. 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
                                    1. Genre met la structure de tes tables et dis moi ce que tu veux récupéré ;-)
                                      0
                                      1. :) d'accord par contre est ce qu'il y a une solution
                                        0
                                        1. Dis voir ta requete en francais :)
                                          0
                                          • 1
                                          • 2