Fonction de calcul php
AMARI
-
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
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:
- Fonction de calcul php
- Fonction si et - Guide
- Calcul moyenne excel - Guide
- Calcul km marche à pied gratuit - Télécharger - Sport
- Easy php - Télécharger - Divers Web & Internet
- Calcul charpente bois gratuit - Télécharger - Architecture & Déco
26 réponses
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
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
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
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
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
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
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 ???
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 ???
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Il te faut absolument une jointure entre v1 et p1. Si t'en a pas tu ne peux pas mettre p1 dans ta requete ...
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
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
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
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
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
ç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
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
Donc le problème c'est ta table parametre_hydros ... Il te faut une clé primaire dessus sinon c'est pas possible
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 :(
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 :(
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);
}
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);
}
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 ?
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 ?