Erreur sql

Fermé
angela - Modifié par angela le 28/03/2012 à 12:59
 angela - 29 mars 2012 à 13:34
Bonjour,

J'utilise wampserver pour créer et manipuler une base de donnée. Ma base contient 3 tables: client, appel, recharge. La table client a comme clé primaire msisdn, ce clé représente une clé étrangère pour les deux autres tables. Le premier problème est que je n'arrive pas à faire la jointure entre ces tables ni en utilisant l'interface graphique ni en utilisant le langage sql. J'ai utilisé le code suivant:
SELECT MSISDN FROM APPEL
WHERE MSISDN.APPEL =MSISDN.CLIENT
Mais ceci ne marche pas, je trouve l'erreur: #1054 - Unknown column 'MSISDN.APPEL' in 'where clause'
Un autre problème, je veux faire un traitement des appels en utilisant un curseur:
DECLARE
CURSOR Mon_Curseur IS
SELECT MSISDN
FROM client
OPEN Mon_Curseur
FOR MSISDN IN Mon_Curseur LOOP
SELECT SUM( TOTAL_COST ) AS TOTAL_COST
FROM APPEL
END LOOP
CLOSE Mon_Curseur
END;
A chaque fois je reçois cet erreur:#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DECLARE CURSOR Mon_Curseur IS SELECT MSISDN FROM client OPEN Mon_Curseur FO' at line 1
J'attends votre aide le plus tôt possible.
Merci d'avance

2 réponses

essayer avec
delect a.msisdn from appel a,client c
where a.msisdn =c.msisdn
1
Bonsoir dewardo,
merci pour votre réponse, le premier problème est résolu grâce à vous . Il me reste le deuxième.
0
OlivrT Messages postés 323 Date d'inscription lundi 2 novembre 2009 Statut Membre Dernière intervention 24 mai 2012 36
28 mars 2012 à 22:37
Le premier problème était facile :-)
Pour le second problème, même si je ne connais donc pas le code en MySQL ce qui me surprend de ce que vous avez affiché, c'est que vous ne placer pas la valeur du SELECT dans une variable ... et c'est l'utilité même d'un curseur ! Un curseur permet de parcourir une sélection, record par record et chaque champ est placé dans une variable.
Seconde chose, ce genre de requête est "interne" au moteur de base de données. On ne peut pas , exécuter ce genre de requête dans une page PHP comme on le ferait pour coder un SELECT par exemple. Je dis ceci au cas où ;-)
Dernièrement, croyez le vieux routier que je suis, c'est d'éviter autant que faire se peut, les curseurs ! Cela demande une montée en régime de la machine très important, excepté bien sûr sur vous disposez d'une bête de course avec beaucoup beaucoup de RAM.

bye
0
Merci OlivrT, mais maintenant j'ai un problème qui m'empêche d'avancer. Je veux, pour chaque valeur de MSISDN de la table client, calculer un indicateur ( TOTAL_COST des appels effectués). J'ai pas trouvé la méthode correspondante, je suis encore débutante en MySQL. J'attends votre aide et merci infiniment :-)
0
essayer juste avec les requetes cé mieux ;)

$reponse=mysql_query("select distinct msisdn from client ") ;
while($donnees=mysql_fetch_array($reponse))
{
$rep1=mysql_query("select sum( msisdn) as somme from appel where msisdn='.$donnees['msisdn '].'") ;
$don1=mysql_fetch_array($rep1);
echo $donnees['msisdn '].' - '.$don1['som']
}
0
Merci dewardo pour votre aide mais malheureusement ceci ne marche pas. Est-ce que vous pouvez me proposer une autre solution? Merci d'avance.
0
Un ami m'a conseillé d'utiliser la clause GROUP BY mais qu'on je l'ai utilisé, elle n'affiche pas la valeur de total_cost pour tous les MSISDN
0
d'apart ce que j'ai compris
tu veux parcourir les msdidn de la table client
et calculer la somme de chaque msdidn dans la table appel pour cette client
??
0
oui, pour chaque client, dont l'identifiant est MSISDN, je veux calculer TOTAL-COST des appels qu'il fait dans la table appel
0
$reponse=mysql_query("select distinct msisdn from client ") ;
while($donnees=mysql_fetch_array($reponse))
{
$rep1=mysql_query("select sum( total_cost) as somme from appel where msisdn='.$donnees['msisdn '].'") ;
$don1=mysql_fetch_array($rep1);
echo $donnees['msisdn '].' - '.$don1['somme '] ;
}

normalemment ce traitement doit bien marcher
si t'as une erreur indique moi ou il se trouve
pour la corriger
0