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 :

Utilisation PHP et MYSQL [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Mars 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2014
    Messages : 9
    Points : 8
    Points
    8
    Par défaut Utilisation PHP et MYSQL
    Bonjour à tous,
    Non coutumier de création de post, j'espère faire les choses correctement... ( sinon j'en suis désolé).
    Voici mon problème:
    J'ai une base de données contenant des informations de commandes, je fais des requêtes sur cette dernière pour sortir un picking ( liste de produits à prélever ). Jusque là tout était OK mais je dois évoluer car il y a de plus en plus de commandes...
    J'ai deux requêtes sql qui me donne deux tableaux distincts:
    Le premier tableau me donne une valeur de 1 à 20 associer à un numéro de commande. Le deuxième tableau me donne une référence, un numéro de commande et une quantité. J'aimerai créer de ces deux tableaux un troisième tableau me donnant la valeur, le numéro de commande, la quantité et la référence et là c'est le drame psychotechnique ( )...
    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
     
    /**Mon tableau 1 = valeur associée au Numéro de commande***/
     
            while($row=mysql_fetch_asoc($req2)){
                $tab[$i] = $row['increment_id'];
    			$i++;
             } 
     
    /**Mon tableau 2 = les infos des commandes***/
    while ($row1 = mysql_fetch_assoc($req1)) 
    {
    	$tab2[]=$row1;
    }
     
    /****** Mon tab3 = Ce que j'aimerai faire (algorithmiquement parlant) ********/
    Pour chaque ligne de mon tab2
    si le numéro de commande de tab2 = numéro de commande de tab
    alors tab3 prend pour valeur : la clé de tab1, le numéro de commande, la référence de tab2, la quantité de tab2
    }
    Résultat:
    tab1
    ID Num cmd
    1 AA
    2 AB
    3 AC
    4 AD

    Tab2
    Num cmd qte ref art
    AA 1 REF A
    AA 2 REF B
    AB 1 REF D
    AC 1 REF A
    AA 1 Ref D
    AC 1 REF X
    AB 1 REF X
    AD 3 REF A

    TAB 3
    ID Num cmd qte REF art
    1 AA 1 REF A
    1 AA 2 REF B
    2 AB 1 REF D
    3 AC 1 REF A
    1 AA 1 Ref D
    3 AC 1 REF X
    2 AB 1 REF X
    4 AD 1 REF A

    Je suis ouvert à toutes orientations, s'il est possible d'utiliser que mon tab2 pour ajouter un ID différent à mon tableau pour des numéros de commandes différents c'est aussi bien

    Merci pour votre aide.

  2. #2
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Essaie ça.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select t1.id, t1.Numcmd, t2.qte, t2.refart
    from tab1 t1
    inner join tab2 t2 on t1.Numcmd = t2.Numcmd
    je n’ai pas la clause order by car si tu veux faire ton picking de manière plus optimisée tu dois faire tous les prélèvements d’un article en même temps.
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Mars 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2014
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Merci de ton retour badaze, je n'ai peut être pas donné assez d'infos... désolé
    En gros par rapport à ma BDD, j'ai juste une table avec les infos " N° cmde, qte, reférence produit".
    J'ai donc fait une première requête sur cette table que j'ai mis dans un Array ( $tab1 ) pour associer un N° de commande à une valeur entre 1 et 20 ( la clé du array) car je ne sort que 20 commandes à la fois.
    J'ai ensuite une deuxième requête sur la table qui me donne les infos des commandes que j'ai mis dans un autre array ($tab2).
    Je voudrais faire un troisième array/tableau avec la valeur de 1 à 20 correspondant au numéro de commande et les autres infos des différentes lignes que me sort la requête 2.

    La requête 2 est ma requête qui me permettait de sortir les infos sur la référence produit et la quantité ( avec des jointures sur différentes tables et avec un Group By), aujourd'hui ma requête n'est plus opérationnelle car quand j'ai 1000 articles dans mon bac de préparation je perds du temps à faire les commandes le temps de retrouver ou est l'article de tel commande. Alors je me suis dit, je vais mettre les articles de chaque commande ensemble mais en suivant le rangement de mon entrepôt qui suit l'ordre de mes références produit.

    Mon problème et de ne pas avoir cette "ID" ( la valeur de 1 à 20) correspondant à la commande 1, 2, 3... d'ou l'utilisation du tab1

  4. #4
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Il faudrait que tu postes la requête que tu utilises actuellement.
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Mars 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2014
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Voici mes requêtes sql :

    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
     
    //correspondant à tab
    $sql2="select sales_flat_order.increment_id 
    FROM sales_flat_order_item, catalog_product_entity_varchar, sales_flat_order
    where sales_flat_order_item.product_id = catalog_product_entity_varchar.entity_id 
    And sales_flat_order_item.order_id = sales_flat_order.entity_id 
    And catalog_product_entity_varchar.attribute_id = 218 
    And sales_flat_order_item.product_type = 'simple' 
    And sales_flat_order.state = 'processing' 
    and sales_flat_order.increment_id between ".$num-cmd1." and ".$num-cmd2." 
    group by sales_flat_order.increment_id";
     
     
    // correspondant à tab2
    $sql1="Select catalog_product_entity_varchar.value, sales_flat_order_item.qty_ordered as qte, sales_flat_order.increment_id 
    FROM sales_flat_order_item, catalog_product_entity_varchar, sales_flat_order
    where sales_flat_order_item.product_id = catalog_product_entity_varchar.entity_id
    And sales_flat_order_item.order_id = sales_flat_order.entity_id
    And catalog_product_entity_varchar.attribute_id = 218
    And sales_flat_order_item.product_type = 'simple'
    And sales_flat_order.state = 'processing'
    and sales_flat_order.increment_id between ".$num-cmd1." and ".$num-cmd2."
    ORDER BY `catalog_product_entity_varchar`.`value` ASC";

  6. #6
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Tes requêtes sont plus compliquées que ne laissaient entrevoir tes exemples.

    Néanmoins tu peux essayer d'adapter cette technique.

    gg_ordersH est l'entête de commande
    gg_ordersrows est les lignes de commande.

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT id, H.ordernum, item, quantity FROM 
    (
     select (@num:=@num+1) as id, ordernum 
        from `gg_ordersH`, 
     (select @num:=0) t
        where ordernum BETWEEN 5 AND 7
    ) H
    , gg_ordersrows R WHERE H.ordernum = R.ordernum  
    ORDER BY item,id

    De plus tu as fait ta requête à l'ancienne. Maintenant on utilise les JOIN plutôt que la clause where pour lier les tables entre elles.

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT id, H.ordernum, item, quantity FROM 
    (
     select (@num:=@num+1) as id, ordernum 
        from `gg_ordersH`,
     (select @num:=0) t
        where ordernum BETWEEN 5 AND 7
        order by ordernum 
    ) H
    INNER JOIN gg_ordersrows R on H.ordernum = R.ordernum  
    ORDER BY item,id

    Dans l'exemple ci-dessous, le même ordernum a toujours le même id.

    Nom : Capture20180809-002.JPG
Affichages : 79
Taille : 42,2 Ko
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Mars 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2014
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Merci, j'essaye ça demain et te fais un retour.
    Merci encore pour le temps consacré

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Mars 2014
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2014
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Hello Badaze,
    Ta solution doit être bonne mais j'ai des cafouillis et donc tous mes articles ne s'affichent pas... J'ai trouvé une autre solution un peu "bricolage" mais bon je me dis que ça ira dans le sens ou c'est pour sortir un csv "bidon" de liste articles.
    J'ai donc fait une table temporaire avec le résultat de la requête 1 et une autre table temporaire avec la requête 2 et j'affiche avec une 3ème requête ma liste.
    Un grand merci à toi pour ton aide et m'avoir permis ce "déblocage" psychotechnique

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

Discussions similaires

  1. Livre d'or sur page html sans utiliser php et Mysql
    Par fartouk dans le forum Balisage (X)HTML et validation W3C
    Réponses: 13
    Dernier message: 31/07/2011, 17h20
  2. Réponses: 23
    Dernier message: 22/05/2008, 04h12
  3. [MySQL] Problème de syntaxe avec variable utilisée dans fonction PHP et MySQL
    Par redvivi dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 19/03/2008, 21h07
  4. [MySQL] Utilisation PHP MySQL dans le cadre de l'amélioration d'un logiciel
    Par lince102 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 01/03/2008, 23h14
  5. [MySQL] Utiliser PHP et MySQL pour un site à fort traffic
    Par lexayo dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 17/12/2007, 17h40

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