Fonction de calcul php

Fermé
AMARI - 23 juil. 2013 à 12:11
 AMARI - 24 juil. 2013 à 13:21
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 lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
23 juil. 2013 à 14:12
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
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 lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
23 juil. 2013 à 14:56
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
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 lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
23 juil. 2013 à 15:07
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
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 lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
23 juil. 2013 à 15:12
Dis voir ta requete en francais :)
0
:) d'accord par contre est ce qu'il y a une solution
0
jeremy.s Messages postés 1226 Date d'inscription lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
23 juil. 2013 à 15:16
Genre met la structure de tes tables et dis moi ce que tu veux récupéré ;-)
0
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 lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
23 juil. 2013 à 15:34
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
ç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 lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
23 juil. 2013 à 15:42
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
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 lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
23 juil. 2013 à 16:15
Il faudrait un mois aussi dans scenario_sequence_anneee aussi alors ;-)
0
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 lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
24 juil. 2013 à 08:20
Tu veux 12 résultats ? Genre tu veux affiché chaque mois pour une année ?
0
Bonjour jeremy.s,
oui exactement que je veux
0
jeremy.s Messages postés 1226 Date d'inscription lundi 28 mars 2011 Statut Membre Dernière intervention 2 septembre 2013 79
24 juil. 2013 à 11:07
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
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