IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Procédural MySQL Discussion :

Récupérer des données sur 3 tables..


Sujet :

SQL Procédural MySQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 6
    Points : 4
    Points
    4
    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

  2. #2
    Membre confirmé
    Avatar de Schmorgluck
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    371
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Mai 2006
    Messages : 371
    Points : 558
    Points
    558
    Par défaut
    Alors comme ça, au débotté et sans vérification (j'ai pas moyen de tester) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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.
    There's nothing like $HOME!

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    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

  4. #4
    Membre habitué
    Inscrit en
    Mai 2006
    Messages
    139
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2006
    Messages : 139
    Points : 147
    Points
    147
    Par défaut
    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).

  5. #5
    Membre éclairé
    Avatar de gerald2545
    Profil pro
    Inscrit en
    Février 2003
    Messages
    744
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 744
    Points : 773
    Points
    773
    Par défaut
    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....

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    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

  7. #7
    Membre éprouvé
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Points : 1 249
    Points
    1 249
    Par défaut
    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

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    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à

Discussions similaires

  1. Réponses: 1
    Dernier message: 26/08/2013, 17h24
  2. Récupérer des données sur pusieurs tables
    Par Nikimizi dans le forum Langage SQL
    Réponses: 6
    Dernier message: 31/05/2013, 14h29
  3. Réponses: 3
    Dernier message: 28/01/2007, 19h25
  4. récupérer des données sur une clef USB
    Par mullger dans le forum Périphériques
    Réponses: 6
    Dernier message: 25/09/2006, 18h38
  5. Récupérer des données sur une page HTML
    Par rupeni dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 18/11/2005, 17h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo