Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/05/2007, 07h48   #1
Invité de passage
 
Inscription : mai 2007
Messages : 6
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 6
Points : 1
Points : 1
Par défaut Récupérer des données sur 3 tables..

bonjour,

voilà mon probleme

je voudrais à partir de 3 tables
client (contient les données clients)
achat (liste des achats par ID client)
cout (prix de chaque article)

Voila ce que je voudrais faire

-> dans le meilleur cas
une liste de chaque client qui contiendrais 1) le nom 2) le total des achats fait par ce client 3) le nombre de produits acheté

-> au pire
le total des achat fait par 1 client...


voici les tables
client: id,nom,societe,info.....
achat: id_client,id_achat....
cout: id_achat,prix...

les prix sont des entiers (pour par exemple 5,6€ nous avons 560 (560 centimes d'euros)

merci d avance
sanaell est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2007, 09h13   #2
Membre éprouvé
 
Avatar de Schmorgluck
 
Inscription : mai 2006
Messages : 349
Détails du profil
Informations personnelles :
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : mai 2006
Messages : 349
Points : 435
Points : 435
Alors comme ça, au débotté et sans vérification (j'ai pas moyen de tester) :
Code :
1
2
3
4
5
6
 
SELECT client.nom, sum(cout.prix), count(achat.id_achat)
FROM client, achat, cout
WHERE client.id_client=achat.id_client
AND achat.id_achat=cout.id_achat
GROUP BY client.id ;
Je crois que ça devrait marcher.
Schmorgluck est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2007, 10h47   #3
Invité de passage
 
Inscription : mai 2007
Messages : 6
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 6
Points : 1
Points : 1
merci, mais
le ptit soucis c est que la base fait plus de 5000 entrée donc...

ca plante...

y a t il un autre moyen detourné enfin je sais pas
sanaell est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/05/2007, 13h16   #4
Membre habitué
 
Inscription : mai 2006
Messages : 139
Détails du profil
Informations personnelles :
Âge : 31

Informations forums :
Inscription : mai 2006
Messages : 139
Points : 137
Points : 137
A priori, si ta table est trop grosse, tu peux stocker dans la table client :
- le nombre d'articles achetés
- le montant dépensé

Quand un client fait une commande, tu mets à jour automatiquement ces données.
Tu n'as alors qu'une table à interroger.

Après, il faut être certain que tu gères bien la mise à jour des champs récapitulatifs. Pour cela, tu peux recourir à des triggers (si ta version de Mysql les supporte).
gk14fire est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/05/2007, 13h28   #5
Membre chevronné
 
Avatar de gerald2545
 
Inscription : février 2003
Messages : 643
Détails du profil
Informations forums :
Inscription : février 2003
Messages : 643
Points : 660
Points : 660
Citation:
le ptit soucis c est que la base fait plus de 5000 entrée donc...

ca plante...
comment ça "ça plante", c'est quoi le message d'erreur?
5000 entrées....je ne trouve pas que ce soit énorme....
gerald2545 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/05/2007, 17h50   #6
Invité de passage
 
Inscription : mai 2007
Messages : 6
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 6
Points : 1
Points : 1
Server mysql 5.2 falcon

Obligation des tables donc pas possible de rajouter un champs ou autre... elles doivent rester tel qu'elle sont



Pour le "plante" avec les +5000 entrée
je dirais plutot ca freeze.... et ca ne semble pas faire d action

j utilise navicat et... "processing" mais rien d autre, et meme après 10 minutes toujours rien... meme "Time out" donc....


Ce qu'il faudrait exactement c est que j obtienne une liste de chaque client avec le total de leur achat fait
exemple
nom_client total_achat
blabla 5464 euros

merci
sanaell est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/05/2007, 12h04   #7
Membre Expert
 
Avatar de Sivrît
 
Inscription : février 2006
Messages : 953
Détails du profil
Informations personnelles :
Âge : 30
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : février 2006
Messages : 953
Points : 1 189
Points : 1 189
Je ne connais pas bien falcon, mais pour qu'une requête aussi simple pédale comme ça avec 5000 pauvres entrées... elles sont bien évidemment indexées tes tables... ?


Si ce sont 5000 clients avec beaucoup d'achats (mais alors pour tenir plus de 10 minutes vraiment colossalement beaucoup), il faudrait essayer pour un seul client et voir le temps que ça met. Et il y a la possibilité de faire ça client par client... mais ça ne devrait pas être aussi lent.


Sinon à noter que l'on parle d'une version de mysql pas vraiment mûre
Sivrît est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/05/2007, 20h03   #8
Invité de passage
 
Inscription : mai 2007
Messages : 6
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 6
Points : 1
Points : 1
je pense que je vais mettre un LIMIT ou un where avec le client 1 pour tester, car je comprends pas non plus pourquoi ca pédale comme ca

mais pour donnée un ordre d'idée
1 client
entre 5 et 200 produit unique (je pense que ca dois pas aller au dela)
environ 5000 prix




Je crois avoir compris pourquoi ca pédale...
je crois que c est simplement du au fait que 1 produit peut avoir 10 vendeurs different
ce qui fait que si j ai 100 produit, vendu par 10 vendeur, ca donne 1000 reference prix


Donc je dois faire une selection de produit UNIQUE dans la grille



comment avoir une selection sur la table3
tel que

A (id vendeur)
B (id produit)
C (prix produit)

en ayant que B et C unique en ne prenant pas en compte le vendeur et en gardant uniquement le premier prix trouvé

exemple si id produit = 5000 et que le prix de "5000" est de 10euros, mais que un vendeur le vends 8 euros je voudrais uniquement voir le 10 euros

en fait cette table contient les references des vendeurs mais les prix sont toujours les premiers trouvé pour les clients, car les derniers sont la uniquement pour les cas spéciaux et j ai une table pour ces clients là
sanaell est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h42.


 
 
 
 
Partenaires

Hébergement Web