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

Langage SQL Discussion :

[MySQL] Amélioration Requête SQL


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 3
    Par défaut [MySQL] Amélioration Requête SQL
    Bonjour,

    J'ai créé une requête qui doit m'afficher la dernière quantité entrée en stock des articles de mon stock. Je m'explique :

    1) Tables :

    articles
    entrees
    sorties

    2) voici ma requête sous PHP que j'aimerais amélioré car elle met un temps fou :
    <?
    # ouverture de la Base de données
    $bdd = mysql_connect('localhost','root','');
    mysql_select_db('stock',$bdd);

    # query the users table for name and surname
    $query = "SELECT * FROM articles";

    $result=mysql_query($query);

    # fetch the data from the database
    while($row=mysql_fetch_row($result))
    {
    $code_article=$row[1];

    $query_entrees = "SELECT DTFACT, CODART, QUANTI FROM entrees where CODART='$code_article' AND DTFACT=(SELECT MAX(DTFACT) FROM entrees where CODART='$code_article' ORDER BY DTFACT) GROUP BY CODART";

    while ($result_entrees=mysql_fetch_row(mysql_query($query_entrees)))
    {
    $quantite_entrees=$result_entrees[2];
    }

    print ("$code_article --> Dernière quantité entrée : $quantite_entrees \n ");
    print ("<br>");
    }
    ?>


    Merci de votre aide. Biensûr si vous pensez que ma requête est inadaptée, n'hésitez pas à me le signaler.

    Stephane

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut
    Pourquoi ajouter une boucle par article ?
    La simple requête suivante te donne tous tes résultats, pour tous les articles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT  e.dtfact
        ,   e.codart
        ,   e.quanti 
    FROM    entrees AS e 
    WHERE   e.dtfact = (    SELECT  MAX(dtfact) 
                            FROM    entrees AS m 
                            WHERE   e.codart = m.codart
                        ) 
    ;
    Rappel : Ta question est posée dans le forum Langage SQL, je t'encourage vivement à lire ceci
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Par défaut
    Ici, c'est le forum SQL, si ton problème est lié à ce langage, merci de supprimer le code php.

  4. #4
    Xo
    Xo est déconnecté
    Membre Expert
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 52

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Par défaut
    Salut,

    Merci de respecter un minimum les CONSEILS... à lire AVANT de POSTER

    En particulier :
    Citation Envoyé par Fred_D
    Ce forum est dédié au langage SQL, merci donc de bien vouloir vous limiter à celui-ci lors de la citation de votre code. Notamment le code PHP, étant difficilement lisible pour les profanes veuillez l'éviter
    A quoi te sert la première requête ?
    Si tu as de nombreaux articles dans ta BDD, le "fetch" risque de prendre un certain temps, mais comme je ne connais pas le PHP, je ne vois pas ce que tu veux faire ...

    Concernant ta 2° requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT DTFACT, CODART, QUANTI
      FROM entrees 
     WHERE CODART='code' 
       AND DTFACT = (SELECT MAX(DTFACT) 
                       FROM entrees 
                      WHERE CODART='code'
                      ORDER BY DTFACT) 
     GROUP BY CODART;
    Le Order By dans la sous-requête ne sert strictement à rien puisque tu prends le MAX : enlève-le.

    Bref, il faudrait que tu traces quelle partie de ton code te prends du temps pour que l'on puisse t'aider.

    [Edit] grilled twice [/Edit]
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  5. #5
    Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 3
    Par défaut
    Merci à tous de vos réponses.

    Désolé pour le code PHP et oui je pense que ma question est sur le bon forum. Je ferais attention la prochaine fois.

    Alors j'ai essayé la requête de al1_24 mais cela met un temps fou et il ne m'a rien affiché. J'ai lancé directement la requête SQL sans passé par PHP. (sinon je vais me faire taper sur les doigts !!)

    Le premier select va me servir à construire mon tableau en PHP (et oui désolé). Sachant que tous mes articles n'ont pas eu forcément d'entrées en stock, j'ai pensé qu"il était utile de faire ce premier select.

    En fait, je veux connaître la dernière date d'entrée en stock (table entrees) de chaque article (de ma table article)

    Suis-je clair ?

    Merci,
    Stephane

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut
    Citation Envoyé par Biboune2006
    En fait, je veux connaître la dernière date d'entrée en stock (table entrees) de chaque article (de ma table article)
    Suis-je clair ?
    Tout à fait clair.
    La requête suivante te retournera tous les articles et, pour ceux qui ont des entrees en stock, la quantité et la date de la dernière entrée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT  a.codart
        ,   e.dtfact
        ,   e.quanti 
    FROM    articles    AS a
        LEFT JOIN
            entrees     AS e
            ON  a.codart = e.codart 
            AND e.dtfact = (    SELECT  MAX(dtfact) 
                                FROM    entrees AS m 
                                WHERE   e.codart = m.codart
                            ) 
    ;
    Pour ce qui est de la durée de la requête, quel est ton SGBD ? Les tables ont-elles beaucoup de lignes ? Ton serveur est-il suffisant ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  7. #7
    Candidat au Club
    Inscrit en
    Juillet 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 3
    Par défaut
    Merci al1_24

    SGBD : MySQL
    Serveur: mon portable en local (je teste dessus) P IV 2Ghz 1Go RAM
    Tables articles : 12500 lignes
    Table entrées : 13686 lignes

    j'ai lancé la requête d'al1_24 mais toujours très très lent

Discussions similaires

  1. [MySQL-5.5] mysql MRBS -u mbrs -p <tables.my.sql
    Par zakdell dans le forum Requêtes
    Réponses: 0
    Dernier message: 11/10/2013, 12h55
  2. [MySQL] Problème d'exécution d'une requête SQL
    Par siempre dans le forum Requêtes
    Réponses: 8
    Dernier message: 17/02/2012, 13h07
  3. [MySQL 4.1.9] pbm de requete sql
    Par mariafan dans le forum Langage SQL
    Réponses: 8
    Dernier message: 10/07/2007, 16h51
  4. de Mysql à sql serveur
    Par zola dans le forum JDBC
    Réponses: 3
    Dernier message: 08/11/2004, 18h02

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