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 :

Afficher une seule référence


Sujet :

Langage SQL

  1. #1
    Débutant
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    886
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 886
    Points : 330
    Points
    330
    Par défaut Afficher une seule référence
    salut

    je ne suis pas doué en requête sql, c'est pourquoi je me remet à vous :

    j'ai une table article : id, ref, taille, prix, quantité

    on peut avoir plusieurs fois la même référence, ce qui changera sera la taille, ex :

    1 | ref = 123 | M | 15 € |10 pcs |
    2 | ref = 123 | L | 15 € |13 pcs |
    ect

    (bien sur les champs prix et quantité sont numérique et donc il n'y a pas de € et pcs)

    ce que j'aimerais dans ma requête c'est faire apparaitre les articles en énumérant une seule fois les références, mais en même temps j'aimerais jeter un coup d’œil à la quantité CAR si la somme des quantités d'une même référence = 0 alors j'affiche un logo "rupture" sinon j'affiche un logo qui permet de commander

    il peut très bien avoir un modèle épuisé et un modèle avec toujours quelques pièces : du moment qu'un des modèles n'est pas à 0 c'est bon / si toutes les quantités d'une même référence est à 0 et bien logo "rupture"

    j'espère avoir réussi à vous expliquer

    je vous remercie d'avance

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    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 109
    Points : 28 437
    Points
    28 437
    Par défaut
    Tu cherches donc à faire un regroupement par référence en calculant la somme des quantités...
    Il ne te reste plus qu'à utiliser les mots correspondants du langage SQL dans ta requête

  3. #3
    Débutant
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    886
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 886
    Points : 330
    Points
    330
    Par défaut
    mais on dirait que j'ai réussis !!! j'ai testé vite fait et ça m'a l'air bien ! il fallait juste interpréter ce que je voulais faire ! je te remercie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT `id_article`, `ref_article`, `prix_article`, sum(`quantite_article`) 
    FROM `articles` 
    WHERE 1
    group by `ref_article`
    order by `id_article`
    ça va ? pas besoin d'amélioration / optimisation ?

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 950
    Points : 5 849
    Points
    5 849
    Par défaut
    La requête est techniquement fausse (mysql est trop permissif)

    Toutes les colonnes sélectionnées et non agrégées doivent faire partie de la clause GROUP BY.
    Donc le problème est que votre requête va vous remonter un prix, et si une ref peut avoir plusieurs prix alors un prix au hasard sera affiché, et le concept d'afficher des informations au hasard n'est pas top.
    Et pour l'id_article idem, un id au hasard par ref sera affiché, et il est peut être même possible que l'id ne corresponde pas au prix.

    Du coup dans votre exemple que souhaitez vous afficher, et si vous souhaitez afficher d'autres infos que la ref et la quantité, quelle ligne est censé être affichée.

  5. #5
    Débutant
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    886
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 886
    Points : 330
    Points
    330
    Par défaut
    salut skuatamad, merci pour ton intervention ...

    je ne sais pas si je me suis mal pris dans la conception de la table, mais pour te donner plus d'information sur le fonctionnement, une référence est presque comme une ID, elle est unique et seul un champs peut changer c'est la taille (et la quantité bien sur); donc le prix reste le même

    ce que je cherche à faire c'est afficher tous les produits sur ma page, sans afficher le même produit en plusieurs fois, vu que c'est que la taille qui changera

    le SUM quantité c'est pour afficher "rupture" si le total des tailles d'une référence est égale à 0

    c'est la 1ère fois que je fais ce genre de site e-commerce, et donc je n'ai pas beaucoup d'expérience, je suis preneur si vous avez une meilleur vision de cette table

    à la base quand j'entre un produit je fais :

    ID (auto) [=| Référence_article | Description, poids, ect | Taille_article | Quantité article |

    lors de l'achat j'édite la référence acheté pour soustraire la quantité bien sur

    est ce une bonne méthode ?

  6. #6
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 950
    Points : 5 849
    Points
    5 849
    Par défaut
    Donc ça ne sert à rien de sélectionner l'id article puisqu'il fait référence à plusieurs tailles qui ne sont pas affichées.
    Si les prix sont identiques autant écrire la requête proprement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT ref_article, prix_article, sum(quantite_article) 
      FROM articles
     GROUP BY ref_article, prix_article
     ORDER BY ref_article
    Ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT ref_article, max(prix_article), sum(quantite_article) 
      FROM articles
     GROUP BY ref_article
     ORDER BY ref_article

  7. #7
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Citation Envoyé par Coussati Voir le message
    je ne sais pas si je me suis mal pris dans la conception de la table.
    Il semblerait en effet.

    Vous devriez avoir deux tables : une pour les articles (avec la référence et le prix, puisqu'il ne dépend pas de la taille), et une deuxième avec les tailles et leur stock respectif.

    ...Mais cela n'aurait pas dispensé pas d'un GROUP BY bien écrit.

Discussions similaires

  1. afficher une seule colonne dans un datagrid
    Par ASSOCIATION dans le forum C#
    Réponses: 1
    Dernier message: 25/01/2008, 16h43
  2. [MySQL] afficher une seule fois les réponses identiques
    Par Giantrick dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 30/05/2007, 12h35
  3. Afficher une seule fenêtre dans la barre des taches
    Par Amissan dans le forum Interfaces Graphiques en Java
    Réponses: 7
    Dernier message: 25/01/2007, 16h56
  4. [XSLT] Afficher une seule fois les attributs redondants...
    Par kobe dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 17/11/2005, 09h52
  5. Joindre 2 colonnes pour en afficher une seule
    Par major2 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 04/04/2005, 15h17

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