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

PHP & Base de données Discussion :

tableau issu de mysql


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2015
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Février 2015
    Messages : 41
    Points : 25
    Points
    25
    Par défaut tableau issu de mysql
    Bonjour, je souhaite produire un tableau excel à partir d'une table mysql. Ma table contient les champs suivants:
    nom | produit | quantité commandée |
    mon tableau doit comporter en colonnes les noms, en ligne les produits et à l'intersection les quantités commandées par chaque nom pour chaque produit.
    sabotage m'avait aidé sur un problème analogue (http://www.developpez.net/forums/d15...-tableau-html/), mais j'ai une contrainte supplémentaire (affichage des noms en début de ligne) et je ne parviens pas à transposer le code que m'avait indiqué sabotage.
    Merci d'avance de bien vouloir regarder mon problème.
    JD

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2015
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Février 2015
    Messages : 41
    Points : 25
    Points
    25
    Par défaut
    Bjr, je ne suis pas certain d'avoir été assez clair.
    Voici mon besoin en affichage depuis ma base mysql:
    Nom : Capture.JPG
Affichages : 99
Taille : 18,7 Ko
    les produits étant stockés dans une table "catalogue" et les quantités , les clients et les produits commandés dans une table "commandes". Je fais une jointure externe entre les 2 tables de façon à afficher tous les produits du catalogue et seulement les clients ayant passé commande
    Pour l'instant je n'arrive qu'à:Nom : Capture.JPG
Affichages : 108
Taille : 15,4 Ko

    JD
    Citation Envoyé par JDP91 Voir le message
    Bonjour, je souhaite produire un tableau excel à partir d'une table mysql. Ma table contient les champs suivants:
    nom | produit | quantité commandée |
    mon tableau doit comporter en colonnes les noms, en ligne les produits et à l'intersection les quantités commandées par chaque nom pour chaque produit.
    sabotage m'avait aidé sur un problème analogue (http://www.developpez.net/forums/d15...-tableau-html/), mais j'ai une contrainte supplémentaire (affichage des noms en début de ligne) et je ne parviens pas à transposer le code que m'avait indiqué sabotage.
    Merci d'avance de bien vouloir regarder mon problème.
    JD

  3. #3
    Invité
    Invité(e)
    Par défaut
    Le code qui gere tout ca pourrait aider

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2015
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Février 2015
    Messages : 41
    Points : 25
    Points
    25
    Par défaut
    Bonsoir
    voici un bout du code qui me donne ce résultat ci-dessus qui ne me convient pas
    JD
    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
    $query_user="SELECT com.nom_cde as nom,cat.prod_name as produit, com.qte_cde as qte FROM commandes as com
    RIGHT JOIN catalogue AS cat ON com.libe_cde=cat.prod_name WHERE ( cat.date_liv>CURDATE()) ORDER BY prod_code ASC";
    	$query_user_cde=mysql_query($query_user,$db) or die(mysql_error($db));
    while ($row=mysql_fetch_array($query_user_cde))
    {
    	$prod=$row['produit'];
    	$nom=$row['nom'];
            $data[$row['nom']][]=$row['qte'];
    }
    //echo '<th bgcolor="#eeeeee">'. $nom .'</th>';
    echo '<table  border="2" cellpadding="5" cellspacing="0">';
    echo '<tr>';
    //echo $produit."<BR>";
    foreach ($data as $nom=>$produit)
    {
    echo '<th bgcolor="#eeeeee">'. $nom .'</th>';
    }	
    echo "<BR>";
    echo '</tr>'; 
     
    for ($i = 0; $i < 43; $i++) {
        echo '<tr>';
         foreach ($data as $nom=>$produit)
    	 {
             $value = (isset($produit[$i])) ? $produit[$i] : '';
             echo '<td>' . $value . '</td>';
          }
        echo '</tr>';
    }
    echo '</table>'; 
    echo "<br>"."<br>";
    Citation Envoyé par Mrsky Voir le message
    Le code qui gere tout ca pourrait aider

  5. #5
    Invité
    Invité(e)
    Par défaut
    A quoi sert la boucle for? Et a quoi correspond 43 ?

    Tu as aussi un <br> dans ton tableau qui ne devrait pas etre la.

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2015
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Février 2015
    Messages : 41
    Points : 25
    Points
    25
    Par défaut
    Bonjour la boucle for sert à lister chacune des 43 lignes du tableau. 43 est un nombre arbitraire qui sera remplacé par une variable (nombre de produit du catalogue) quand je serai arrivé à quelque chose.
    Le <BR> ne gêne pas, c'est un résidu d'un test qui était là(var_dump + BR)
    JD


    Citation Envoyé par Mrsky Voir le message
    A quoi sert la boucle for? Et a quoi correspond 43 ?

    Tu as aussi un <br> dans ton tableau qui ne devrait pas etre la.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Ton tableau $data est mal concu pour afficher ce que tu souhaites faire car tu affectes a chaque produit un tableau de valeur sans ordre.

    De plus ton exemple visuel parle de clients et il n'y a aucune notion de client dans ton code donc je ne peux pas te proposer de solution.

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2015
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Février 2015
    Messages : 41
    Points : 25
    Points
    25
    Par défaut
    Merci de cette réponse.
    En effet ce que j’appelle "client #" dans mon visuel est le $nom de mon script dans le "nom" de ma table "commandes". Par contre je ne comprends pas "...tu affectes a chaque produit un tableau de valeur sans ordre." et je pense bien que mon problème tourne autour de çà puisque toutes les quantités dans chaque colonne s'affichent à la suite de la donnée de la ligne précédente, quand bien même je m'attendrais à y trouver un blanc. En outre je ne sais pas comment faire afficher les "produits" en tête de chaque ligne...

    Citation Envoyé par Mrsky Voir le message
    Ton tableau $data est mal concu pour afficher ce que tu souhaites faire car tu affectes a chaque produit un tableau de valeur sans ordre.

    De plus ton exemple visuel parle de clients et il n'y a aucune notion de client dans ton code donc je ne peux pas te proposer de solution.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Une solution a ton probleme est de creer 2 tableaux, un pour afficher les noms dans l'en-tete du tableau et l'autre pour le reste des donnees.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $entetes = array();
    $data = array();
    while ($row = mysql_fetch_array($query_user_cde)) {
      $entetes[] = $row['nom'];
     
      if (!isset($data[$row['produit']])) {
        $data[$row['produit']] = array():
      }
      $data[$row['produit']][] = $row['qte'];
    }
    Puis l'affichage

    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
    echo '<table border="2" cellpadding="5" cellspacing="0">';
    echo '<tr>';
    echo '<th></th>';
    foreach ($entetes as $entete) {
      echo '<th>'.$entete.'</th>';
    }
    echo '</tr>';
     
    foreach ($data as $produit => $quantites) {
      echo '<tr>';
      echo '<th bgcolor="#eeeeee">'.$produit.'</th>';
      foreach ($quantites as $quantite) {
        echo '<td>'.$quantite.'</td>';
      }
      echo '</tr>';
    }
    echo '</table>';
    Au passage un meilleur nommage des variables, ca aide a bien comprendre son code. Egalement c'est une bonne pratique d'initialiser ses variables avant d'y affecter des valeurs, surtout sur les tableaux ca evite de generer des notices ou des warnings php.

    C'est egalement faisable avec un seul tableau mais je trouve que le code est plus comprehensible de cette facon. Hesites pas si tu as des questions sur ce code.

  10. #10
    Nouveau membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2015
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Février 2015
    Messages : 41
    Points : 25
    Points
    25
    Par défaut
    Merci de ces conseils
    le code que tu me fournis me semble aller dans le bon sens, cependant.
    Voici ce que j'attends:
    Nom : Capture.JPG
Affichages : 101
Taille : 37,5 Ko
    et voici ce que j'obtiens:
    Nom : Capture.JPG
Affichages : 127
Taille : 58,8 Ko

    Il doit manquer un Sum(qte) ou un group by nom dans ma requête (un client commandant plusieurs fois le même produit apparait 2 fois dans 2 colonnes différentes). Par contre toutes les quantités se retrouvent en 1ère colonne quand le produit a été commandé une seule fois
    JD
    Citation Envoyé par JDP91 Voir le message
    Merci de cette réponse.
    En effet ce que j’appelle "client #" dans mon visuel est le $nom de mon script dans le "nom" de ma table "commandes". Par contre je ne comprends pas "...tu affectes a chaque produit un tableau de valeur sans ordre." et je pense bien que mon problème tourne autour de çà puisque toutes les quantités dans chaque colonne s'affichent à la suite de la donnée de la ligne précédente, quand bien même je m'attendrais à y trouver un blanc. En outre je ne sais pas comment faire afficher les "produits" en tête de chaque ligne...

  11. #11
    Invité
    Invité(e)
    Par défaut
    En effet c'est un souci de requete, j'avais suppose qu'elle allait bien. A vue de nez c'est possiblement un SUM() et un ORDER BY qu'il manque mais sans connaitre la structure des tables c'est impossible a affirmer.

  12. #12
    Nouveau membre du Club
    Homme Profil pro
    Retraité
    Inscrit en
    Février 2015
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Février 2015
    Messages : 41
    Points : 25
    Points
    25
    Par défaut
    Voici la structure de mes tables:
    Table Catalogue
    prod_code
    prod_name
    prod_price
    Prod_type
    prod_qte
    date_deb
    date_lim_cde
    date_liv
    Supplier

    Table commandes
    num_cde
    date_cde
    date_liv
    date_paye
    nom_cde
    user_id_cde
    libe_cde
    qte_cde
    ma reqête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT com.nom_cde as nom,cat.prod_name as produit, com.qte_cde as qte FROM commandes as com
    RIGHT JOIN catalogue AS cat ON com.libe_cde=cat.prod_name WHERE ( cat.date_liv>CURDATE() AND cat.Supplier='$fournisseur') ORDER BY prod_code ASC
    J'ai tenté de modifier ma requête en ajoutant un GROUP BY nom==> j'ai perdu l'interêt de ma jointure externe (les produits sans commande n'apparaissent plus en tête de ligne.
    J'ai tenté un sum(qte)==>j'ai perdu toutes le en-tête et toutes les têtes de ligne. seul le total apparaissait.
    Mais le principal problème est l'affichage des quantités en 1ère colonne quand il n'y a qu'une quantité dans la ligne
    Citation Envoyé par Mrsky Voir le message
    En effet c'est un souci de requete, j'avais suppose qu'elle allait bien. A vue de nez c'est possiblement un SUM() et un ORDER BY qu'il manque mais sans connaitre la structure des tables c'est impossible a affirmer.

Discussions similaires

  1. tableau excel vers mysql
    Par phpaide dans le forum Outils
    Réponses: 9
    Dernier message: 13/12/2013, 09h55
  2. Duplication dans un tableau (VBA et MySQL)
    Par xianxian620 dans le forum Access
    Réponses: 5
    Dernier message: 19/02/2007, 13h06
  3. [Tableaux] Tableau multidimension dans mysql
    Par wkd dans le forum Langage
    Réponses: 2
    Dernier message: 12/10/2006, 16h33
  4. [SimpleXML] extraire l'élément d'un tableau issu de simpleXML
    Par FlyByck dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 15/09/2006, 21h04
  5. variables tableau dans requettes mysql ... et affichage
    Par mulbek dans le forum Requêtes
    Réponses: 3
    Dernier message: 26/10/2005, 16h29

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