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

Requêtes MySQL Discussion :

Requête SQL impossible ?


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 14
    Par défaut Requête SQL impossible ?
    Bonjour a tous, a chaque essaie sur SQL je rencontre de nouvelle difficultés..enfin bref c'est comme cela qu'on apprends (je suis debutant)

    J'explique mon problème :

    J'ai une table order_history avec cette structure :

    ID | ID_ORDER | ID_ORDER_STATE | DATE_ADD

    A chaque changement de statut d'une commande (paiement accepter (1), preparation (2), livraison (3) ) cela crée une nouvelle entrée.

    Ex avec quatre commandes :
    ID|ID_ORDER|ID_ORDER_STATE|DATE_ADD
    commande 1 :
    1 | 1 | 1 | 2010-12-12 (paiement accepter)
    2 | 1 | 2 | 2010-12-13 (preparation)
    3 | 1 | 3 | 2010-12-14 (livraison)
    commande 2 :
    4 | 2 | 1 | 2010-12-15 (paiement accepter)
    5 | 2 | 2 | 2010-12-18 (preparation)
    6 | 2 | 3 | 2010-12-21 (livraison)
    commande 3 :
    7 | 3 | 1 | 2011-01-12 (paiement accepter)
    8 | 3 | 2 | 2011-01-15 (preparation)
    9 | 3 | 3 | 2011-01-18 (livraison)
    commande 4:
    10 | 4 | 1 | 2011-02-02 (paiement accepter)
    11 | 4 | 2 | 2011-02-04 (preparation)

    J'aimerai dans ma requette selectioner toutes les commandes en statut 2, mais qui n'ont pas de statut au dessus (donc la commande 4)

    Si je fais un select id_order WHERE id_order_state = 2, il me selectionne tout, alors que je souhaiterai que la commande 4. Je ne sais pas du tout comment faire vu que toutes les entrées sont différentes...

    Avez vous une idée ?

    Merci d'avance.

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 063
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 063
    Par défaut
    Bonjour,

    Essaie la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT id_order
    FROM order_history AS oh1
    LEFT JOIN order_history AS oh2 ON oh1.id_order = oh2.id_order AND oh2.id_order_state > 2
    WHERE oh1.id_order_state = 2
    AND oh2.id IS NULL
    Je n'ai pas testé et c'est fait à la va-vite, mais ça devrait s'approcher de ce que tu cherches.

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 14
    Par défaut
    Bonjour,

    Merci pour ta réponse.

    Je me retrouve avec cette erreur :

    "Column 'id_order' in field list is ambiguous" ...

    J'essaye de me renseigner sur la signification de ce problème .

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Il faut utiliser l'alias dans le SELECT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT oh1.id_order
    ...
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 14
    Par défaut
    Nickel ! Je viens de tester cela fonctionne !

    Ca c'est de la requete !

    Malheureusement, je n'aurais pas fait ca tout seul.

    Si un de vous deux a un ptit peu de temps pour m'expliquer la requete je suis prenneur.

    Encore merci en tt cas, j'update le post en résolu.

  6. #6
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 063
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 063
    Par défaut
    Voici ce que fait la requête :
    Elle sélectionne les commandes (id_order) dans la table order_history (avec l'alias oh1) pour lesquelles l'état vaut 2 (première condition dans le WHERE).
    La jointure sur cette même table permet, pour toutes les lignes sélectionnées sur oh1, de sélectionner en même temps les états de commandes supérieurs à 2 pour la même commande.
    Comme il s'agit d'une jointure externe à gauche (LEFT JOIN), s'il n'y a pas d'état au-delà de 2, la jointure se fait quand même mais renvoie NULL sur toutes les colonnes de l'alias oh2.
    Du coup, pour ne conserver que les commandes sans état supérieur à 2, il ne reste justement plus qu'à sélectionner, dans le WHERE, les lignes où l'identifiant dans la table oh2 est NULL (ce qui signifie qu'il n'y a rien au-delà de 2).

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

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

Discussions similaires

  1. [AC-2010] Ecriture requête SQL impossible
    Par Flo619 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 31/05/2013, 23h31
  2. [phpMyAdmin] Requêtes SQL impossibles
    Par saraza dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 5
    Dernier message: 18/04/2012, 19h20
  3. [XL-2003] Requête SQL impossible avec objet QueryTable
    Par Sclarckone dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 16/09/2011, 16h09
  4. [PDO] requête sql avec PDO impossible
    Par HALOMOTO dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 22/03/2009, 00h17
  5. [Smarty] boucles imbriquées avec requêtes SQL, impossible à comprendre
    Par dexxter dans le forum Bibliothèques et frameworks
    Réponses: 9
    Dernier message: 18/05/2007, 23h52

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