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 :

Impossible de récupérer le nombre total de chaque produit. [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Intégrateur Web
    Inscrit en
    Mai 2018
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Intégrateur Web
    Secteur : Services de proximité

    Informations forums :
    Inscription : Mai 2018
    Messages : 57
    Par défaut Impossible de récupérer le nombre total de chaque produit.
    Bonjour,
    Depuis un certain temps je suis bloqué sur une récupération de nombre total de produit vendu sur mon site.
    Le problème que les produits commandés sont dans un champ 'produits' de la table 'l_commande' enregistrés avec un serialize.
    Voici le bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $connect_vente = $DB->query('SELECT produits FROM l_commande');
    $nbArticles=count($connect_vente);
    foreach ($connect_vente as $connect_ventes){
    $prod = unserialize($connect_ventes->produits);
    $produit = $prod['libelleProduit'];
    $qte = $prod['qteProduit'];	
    }
    Le but est de récupérer la quantités vendues au total pour chaque produit.
    voici ce que je récupère avec $prod.

    Array ([libelleProduit] => Array ( [0] => produit1 [1] =>produit2 [2] => produit3 [3] => produit4 ) [qteProduit] => Array ( [0] => 6 [1] => 1 [2] => 2 [3] => 6 ))Array ([libelleProduit] => Array ( [0] => produit1 [1] =>produit2 [2] => produit3 [3] => produit4 ) [qteProduit] => Array ( [0] => 6 [1] => 1 [2] => 2 [3] => 6 ))

    Le résultat voulu : produit1 12, produit2 2, produit3 4, produit4 12

    Avez-vous des pistes à me conseiller ?

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 322
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 322
    Billets dans le blog
    17
    Par défaut
    Là tu n'as pas le choix, il faut tout récupérer et compter les produits "à la main" à l'aide d'un tableau PHP.



    Si tu avais une base correctement modélisée une requête de ce genre te donnerait directment le résultat :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT ALL command_product, SUM(command_quantity)
    FROM commands
    GROUP BY command_product

  3. #3
    Membre confirmé
    Homme Profil pro
    Intégrateur Web
    Inscrit en
    Mai 2018
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Intégrateur Web
    Secteur : Services de proximité

    Informations forums :
    Inscription : Mai 2018
    Messages : 57
    Par défaut
    Bonjour,

    j'ai essayé de faire un boucle for mais sans succès.

    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
     
    $connect_vente = $DB->query('SELECT produits FROM l_commande');
    $nbArticles=count($connect_vente);
    $produit=array();
    $produit['libelleProduit'] = array();
    $produit['qteProduit'] = array();
    for ($i = 0 ; $i < count($nbArticles) ; $i++){
    $prod = unserialize($connect_vente->produits);
    $positionProduit = array_search($prod['libelleProduit'],  $produit['libelleProduit']);
    if ($positionProduit !== false)
          {
             $produit['libelleProduit'][$positionProduit] += $prod['qteProduit'];
          }
          else
          {
             array_push( $produit['libelleProduit'],$prod['libelleProduit']);
             array_push( $produit['qteProduit'],$prod['qteProduit']);
          }
    }

  4. #4
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 322
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 322
    Billets dans le blog
    17
    Par défaut
    Mais il manque des choses là => Je ne vois ni itération sur ton résultat, ni accès direct (pas d'utilisation de $i)

    Tu fais des trucs bizarres avec $produit

    Je te propose ceci :

    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
    <?php
     
    $connect_vente = $DB->query('SELECT produits FROM l_commande');
     
    // Je considère $connect_vente comme étant le résultat de la requête
    // Je considère $connect_vente comme étant itérable
     
    $quantite_produits = []; // Couples ["libellé" => "quantité"], il faudrait plutôt ["id" => "quantité"]
    foreach ($connect_vente as $tuple_commande) { // Parcours des commandes
        $tuple_commande = unserialize($tuple_commande);
        foreach ($tuple_commande as $commande_produit) { // Parcours des produits d'une commande
            if (!isset($quantite_produits[$commande_produit['libelleProduit']])) { // Produit déjà rencontré/indexé ?
                $quantite_produits[$commande_produit['libelleProduit']] = 0; // Si non on l'initialise à 0 dans le tableau de résultat
            }
            // Ajout de la quantité du produit de la commande au tableau de résultat global
            $quantite_produits[$commande_produit['libelleProduit']] += $commande_produit['qteProduit'];
        }
    }
     
    print_r($quantite_produits);

  5. #5
    Membre confirmé
    Homme Profil pro
    Intégrateur Web
    Inscrit en
    Mai 2018
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Intégrateur Web
    Secteur : Services de proximité

    Informations forums :
    Inscription : Mai 2018
    Messages : 57
    Par défaut
    Bonjour,

    J'ai essayé le code mais ca ne marche pas.
    J'ai changer de technique est je passe par une session c'est plus simple.
    A première vue cela fonctionne.
    voici le code pour celui qui rencontre le même problème.

    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
     
    if (!isset($_SESSION['vente'])){
          $_SESSION['vente']=array();
          $_SESSION['vente']['libelleProduit'] = array();
          $_SESSION['vente']['qteProduit'] = array(); 
       }
    $connect_vente = $DB->query('SELECT produits FROM l_commande');
    foreach ($connect_vente as $connect_ventes){
    $prod = unserialize($connect_ventes->produits);
    $count_r=count($prod['libelleProduit']);
    for($i = 0; $i < count($prod['libelleProduit']); $i++)
    	{
    		$libelleProduit=$prod['libelleProduit'][$i];
            $qteProduit=$prod['qteProduit'][$i];
     
      $positionProduit = array_search($libelleProduit,  $_SESSION['vente']['libelleProduit']);
     
          if ($positionProduit !== false)
          {
             $_SESSION['vente']['qteProduit'][$positionProduit] += $qteProduit ;
          }
          else
          {
             array_push( $_SESSION['vente']['libelleProduit'],$libelleProduit);
             array_push( $_SESSION['vente']['qteProduit'],$qteProduit);
          }
          }
    }

  6. #6
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 322
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 322
    Billets dans le blog
    17
    Par défaut
    J'ai essayé le code mais ca ne marche pas.
    Si tu disais ce qui ne marche pas ça donnerait une chance de corriger.
    Mais bon, j'ai l'impression que tu préfères suivre une voie tortueuse et périlleuse

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

Discussions similaires

  1. Réponses: 15
    Dernier message: 21/07/2017, 14h57
  2. Réponses: 13
    Dernier message: 11/02/2011, 17h38
  3. Réponses: 4
    Dernier message: 28/05/2010, 17h11
  4. Récupérer le nombre total de sauts de page
    Par cereal dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 25/11/2009, 12h24
  5. [XSL-FO]Récupérer le nombre total de pages d'un doc
    Par Little_flower dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 24/05/2007, 16h16

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