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

Requêtes MySQL Discussion :

[php/mysql] Aidez moi svp.


Sujet :

Requêtes MySQL

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 5
    Points : 2
    Points
    2
    Par défaut [php/mysql] Aidez moi svp.
    Bonjour tout le monde !

    Bon je vais essayer de vous expliquer le mieux possible mon problème parce que c'est assez compliqué ^^

    Alors voilà, je dispose de 5 tables :
    - architectes_fiches (id,nom,prénom etc...)
    - chantiers_architectes (id, id_dossier,nom chantiers, budget etc...)
    - dossiers_architectes (id,id_architecte,date,commercial etc...)
    - contrats_clients (id, id_architecte, id_chantier, chiffre_daffaire etc...)
    - régions (id, region)

    Je dois faire des requètes de sélections en calculant la somme du chiffre d'affaire (contenu dans la table "contrats")
    Je vous donne un exemple :

    On prend un architecte avec l'ID "1" et comme nom "Paul", on l'associe à un dossier et on lui ajoute 3 chantiers, ce qui nous donne, 1 dossier avec en "id_architecte = 1" et 3 chantiers avec id = 1,2,3 et comme "id_dossier = 1". J'espère que jusque là vous me suivez. Maintenant à la comptabilité, ils vont associé un client (ça on s'enfout pour la requète) avec 1 architecte et 1 seul chantier de ce même architecte. Donc si vous me suivez, on aura alors dans la table "contrats" : "id = 1, id_architecte = 1, et on va prendre le 2e chantier "id_chantier = 2", la comptabilité va lui mettre un chiffre d'affaire de 500€ par exemple.

    Jusque là pas de soucis ! Mais quand on a plusieurs contrats pour le même architecte, il faut que lors de ma requète de sélection, je calcule la somme totale du chiffre d'affaire du dossier de cet architecte par ces chantiers ! J'ai réussi à faire cette requète mais le problème c'est qu'il ne m'affiche pas les chantiers n'étant associés à aucun contrats...

    Je vous poste ma requète :

    Dans la variable $champs, j'y ai mis les champs nécessaire et j'ai également mis : sum(clients_contrats.Tarif)
    Tarif = chiffre d'affaire.

    (je vous mets pas la liste parce que c'est trop long mais si c'est nécessaire, je la mettrais)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    $sql = 'SELECT '.$champs.' FROM archis_chantiers, archis_dossiers, archis_fiches, clients_contrats WHERE archis_chantiers.id_dossier = archis_dossiers.id AND archis_dossiers.id_archi = archis_fiches.id AND clients_contrats.Ref_Chantier = archis_chantiers.id GROUP BY archis_chantiers.id ORDER BY archis_dossiers.id';
    $req = mysql_query($sql) or die ('Erreur SQL : '.$sql.'<br />'.mysql_error());
    $fields = mysql_num_fields($req);
     
    for ($i = 0; $i < $fields; $i++) {
      $temp = mysql_field_name($req, $i);
      $header .= $temp . "\t";
    } 
     
    while($row = mysql_fetch_row($req)) {
      $line = '';
      foreach($row as $value) {                                           
          if ((!isset($value)) OR ($value == "")) {
              $value = "\t";
          }
          else {
              $value = str_replace('"', '""', $value);
              $value = '"' . $value . '"' . "\t";
          }
          $line .= $value;
      }
      $data .= trim($line)." €\n";
    }
     
    $data = str_replace("\r","",$data);
     
    $file = "Archis_Total.xls";
    $Fnm = '../../exports/'.$file;
    $inF = fopen($Fnm,"w");
    $data = str_replace("<br />","",$data);
    $data = $header."\n".$data;  
    fputs($inF,$data);
    Comme voius l'aurez compris, une fois que j'ai selectionnée les données, je les mets dans un fichier excel, c'est pour les patrons...

    J'espère que j'ai pu être assez clair, en tout cas, excuser moi si ça ne l'est pas

    Ca fait une semaine que je galère avec, j'ai fouillé toute les docs MySQL pour les jointures mais j'ai pas trouvé mon bonheur donc HELLLP !

    Merci d'avance.

  2. #2
    Membre actif Avatar de riesseg
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    415
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 415
    Points : 251
    Points
    251
    Par défaut
    avant que swoq le modo a la massue arrive, mais z'y vite des balises codes


    me compte le nombre de message a poster en ecorchant son pseudo avant que le dit swoog s'enerve ( j'laisse bet les deux points, je sais pas ou ils sont sur mon clavier...)

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Canada

    Informations forums :
    Inscription : Juillet 2005
    Messages : 774
    Points : 936
    Points
    936
    Par défaut
    personnellement, je pense que la solution a ce pbm se trouve plutot dans un autre forum notamment le forum base de données ou sql (je sais plus).

  4. #4
    Membre régulier
    Inscrit en
    Mai 2005
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 172
    Points : 74
    Points
    74
    Par défaut
    Juste une petite question avant toute chose: Une table client n'est elle pas necessaire pour que ton truc soit clair?

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    bin la table client contient juste les informations relatives au client à savoir nom adresse etc...
    Je pense pas que cette table rende la chose plus clair :p

    J'espère que quelqu'un va pouvoir m'éclaircir

  6. #6
    Membre régulier
    Inscrit en
    Mai 2005
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 172
    Points : 74
    Points
    74
    Par défaut
    en gros tu récupere le chiffre d'affaire global (tout chantier confondu) pour un architecte, c'est ça?

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    C'est à peu près ça, ça doit prendre en compte les chantiers ayant du chiffre (si c'est le cas, calculer la somme total) et n'ayant pas de chiffre (mettre un champ vide).

    je t'ai mis un screenshot de mon fichier excel (il provient d'une requète d'Access...)
    Je voudrais que ça fasse la même chose avec ma requète MySQL

    Le lien : http://fabseg.free.fr/exemple.jpg

    Donc dans l'exemple, on voit bien que ça liste tous les chantiers par rapport à un dossier architecte.

    Le chiffre d'affaire du chantier (CAPUB) correspond aux chiffres d'affaire total de ce chantier, car il peut être affecté à d'autre contrats...
    Et le chiffre d'affaire global (CAGlobal), ça calcule le chiffre d'affaire total de tous les chantiers associés à ce dossier.

    Pas facile...

  8. #8
    Membre régulier
    Inscrit en
    Mai 2005
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 172
    Points : 74
    Points
    74
    Par défaut
    ton probleme, c'est qu'il ne peut pas associer de chantier du fait qu'il fait une somme global,c'est ça?
    Pourquoi ne pas passer par deux requête?

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Oui, il y a des chantiers qui ne sont pas associés aux contrats donc il ne les prend pas en compte forcément.
    Ca passe par la condition :
    "AND clients_contrats.Ref_Chantier = archis_chantiers.id"

    Et il se trouve la le problème car pour faire le calcul du chiffre, je dois passer par le contrat et certains chantiers ne sont associés à aucun contrats...

    (une brève description de ma vie :
    Je viens d'être engagé il y a quelques mois, et la boite travaillait sous Access (quel horreur...) et c'était la pagaille dans tous les sens !
    Les relations entre les tables étaient affreuses etc...

    Et malheureusement pour moi, j'ai dû retranscrire toute cette base Access en php/mysql mais j'étais obligé de garder la même structure (à cause de l'importation de plus de 130 000 données...
    Et je n'ai que 18 ans, lol)

    Sinon, j'aurais bien aimé le faire en 2 requètes mais il y à environ 25000 lignes d'une centaine de champs à exporter, avec une seule requète, c'est déja assez long alors avec 2

    Mais si tu vois la solution en utilisant 2 requètes, je serai ravi que tu me la montres

    Merci de m'aider également

  10. #10
    Membre régulier
    Inscrit en
    Mai 2005
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 172
    Points : 74
    Points
    74
    Par défaut
    La vie est dure!

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

    Informations forums :
    Inscription : Mai 2006
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Et oui...

    Bon je viens de le faire en requètes ça à l'air d'être bon.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    // ici la requète sql précédente, idc correspond à l'ID du chantier.
    while ($res = mysql_fetch_object($req)) {
      $sql1 = 'SELECT sum(Tarif) AS total FROM clients_contrats WHERE Ref_Chantier = '.$res->idc; 
      $req1 = mysql_query($sql1) or die ('erreur : '.mysql_error());
      $res1 = mysql_fetch_object($req1);
    Ca me retourne bien tous les chantiers.

    N'y a t'il pas un moyen de le faire en une requète ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Recuperation de ma base BD apres la sauvegarde Aidez Moi SVP
    Par pop bob dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 26/07/2005, 16h38
  2. J'ai du mal à me décider ! Aidez moi svp :)
    Par VanHelsing dans le forum Mobiles
    Réponses: 18
    Dernier message: 01/06/2005, 14h59
  3. Je vois pas d'où vient mon erreur!! Aidez moi SVP
    Par liliboms dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 04/04/2005, 08h25
  4. Réponses: 29
    Dernier message: 11/05/2004, 13h18

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