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

26 réponses

  • 1
  • 2
  1. jeremy.s Messages postés 1248 Statut Membre 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
  2. 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
  3. jeremy.s Messages postés 1248 Statut Membre 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
  4. 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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. jeremy.s Messages postés 1248 Statut Membre 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
  7. 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
  8. jeremy.s Messages postés 1248 Statut Membre 79
     
    Dis voir ta requete en francais :)
    0
  9. AMARI
     
    :) d'accord par contre est ce qu'il y a une solution
    0
  10. jeremy.s Messages postés 1248 Statut Membre 79
     
    Genre met la structure de tes tables et dis moi ce que tu veux récupéré ;-)
    0
  11. 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
  12. jeremy.s Messages postés 1248 Statut Membre 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
  13. 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
  14. jeremy.s Messages postés 1248 Statut Membre 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
  15. 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
  16. jeremy.s Messages postés 1248 Statut Membre 79
     
    Il faudrait un mois aussi dans scenario_sequence_anneee aussi alors ;-)
    0
  17. 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
  18. jeremy.s Messages postés 1248 Statut Membre 79
     
    Tu veux 12 résultats ? Genre tu veux affiché chaque mois pour une année ?
    0
  19. AMARI
     
    Bonjour jeremy.s,
    oui exactement que je veux
    0
  20. jeremy.s Messages postés 1248 Statut Membre 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
  21. 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
  • 1
  • 2