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 :

[MYSQL] Problème ORDER BY sur deux champs


Sujet :

Requêtes MySQL

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Points : 314
    Points
    314
    Par défaut [MYSQL] Problème ORDER BY sur deux champs
    Bonjour,

    Voilà, j'ai la requête suivante qui me permet de trier les enregitrements par chronologie dans une journée (ORDER BY HEURE_RECEPTION_DOC)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT msg.UNB, msg.UNOA, cmd.BGM, cmd.NBLIGNES, cmd.DATE_RECEPTION_DOC, cmd.HEURE_RECEPTION_DOC, cmd.CODE_STATUT_1, cmd.CODE_STATUT_2, cmd.TYPE_MESSAGE
    FROM message msg, commande cmd, compte com
    WHERE cmd.DATE_RECEPTION_DOC >= '051011'
    AND cmd.DATE_RECEPTION_DOC <= '051011'
    AND cmd.NADDP = com.NADDP
    AND com.PAYS = 'NL'
    AND com.CODE_SUPPLIER
    IN ('M')
    AND msg.ID_MESSAGE = cmd.ID_MESSAGE
    ORDER BY cmd.HEURE_RECEPTION_DOC
    Ca marche bien parce que je fais une recherche que sur une journée(051011).

    Mais je voudrais faire une recherche sur une période (du 051007 au 051011) par exemple.

    Et là, ça me classe les résultats par HEURE sans tenir compte de la DATE.
    7:00 051007 res1
    7:02 051009 res2
    7:03 051007 res3

    or moi je voudrais que tout soit claséé par date et ensuite heure....
    Est-ce possible avec ORDER BY ?
    Faut il utiliser autre chose ??
    tout le monde est d'accord pour critiquer la pensée unique

  2. #2
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Tu as un problème de conception.

    Pour faire des calculs sur les dates, il ne faut pas utiliser de colonnes en VARCHAR. Il faut utiliser des colonnes en DATE.

    Tu peux toujours transformer ton CHAR en DATE, comme ça de tête je ne me rappelle pas de la fonction sous MySQL, car je travaille sous Oracle en ce moment, et sous oracle, il existe des TO_DATE qui marchent bien pour ce genre de cas.

    En gros, TO_DATE te transforme ton CHAR en date, avec le format que tu précises. Ainsi tes calculs/comparaisons se passent bien sur des objets de type DATE, et non sur des données alphabétiques.
    K

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Points : 314
    Points
    314
    Par défaut
    D'accord, je comprends bien.Je vais voir cela de plus près.
    Ceci dit, il n'y a aucun moyen de le faire sur des donnée varchar ?
    J'arrive à faire la comaraison sur un champs varchar donc il doit être possible de le faire sur deux champs varchar non ?
    tout le monde est d'accord pour critiquer la pensée unique

  4. #4
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Si tu as envie de classer avec ton char, tu devras tronquer ta chaine, pour que la date apparaisse en tête, et que la date suive. Attention aux heures "américaine" cependant! 7pm pourrait se retrouver avant 7am...
    K

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Points : 314
    Points
    314
    Par défaut
    Je ne comprends pas bien Désolé.

    Actuellement, ma date se trouve dan sun champs DATE_RECEPTION_DOC sous la forme d'un varchar aammjj
    où a:annee
    m:mois
    j:jour

    et l'heure se trouve dans un autre champs, HEURE_RECEPTION_DOC sous la forme d'un varchar hhmm
    où hh:heure (%24)
    mm:minute
    tout le monde est d'accord pour critiquer la pensée unique

  6. #6
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Dans ce cas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ORDER BY DATE_RECEPTION_DOC||HEURE_RECEPTION_DOC
    Ca devrait fonctionner je pense !
    K

  7. #7
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 903
    Points : 6 027
    Points
    6 027
    Par défaut
    Tu peux aussi tenter avec GROUP BY :
    Citation Envoyé par Aide MySQL
    Si vous utilisez GROUP BY, les lignes sont triées en fonction des colonnes GROUP BY comme si on avait ajouté la clause ORDER BY pour ces colonnes. MySQL a amélioré la clause GROUP BY depuis la version 3.23.34 pour que vous puissiez aussi spécifier ASC et DESC après le nom de la colonne
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Points : 314
    Points
    314
    Par défaut

    Dans ce cas :
    Code:
    ORDER BY DATE_RECEPTION_DOC||HEURE_RECEPTION_DOC
    Ca devrait fonctionner je pense
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    SELECT msg.UNB, msg.UNOA, cmd.BGM, cmd.NBLIGNES, cmd.DATE_RECEPTION_DOC, cmd.HEURE_RECEPTION_DOC, cmd.CODE_STATUT_1, cmd.CODE_STATUT_2, cmd.TYPE_MESSAGE
    FROM message msg, commande cmd, compte com
    WHERE cmd.DATE_RECEPTION_DOC >= '051013'
    AND cmd.DATE_RECEPTION_DOC <= '051013'
    AND cmd.NADDP = com.NADDP
    AND com.PAYS = 'NL'
    AND com.CODE_SUPPLIER IN ('M')
    AND msg.ID_MESSAGE = cmd.ID_MESSAGE
    ORDER BY (DATE_RECEPTION_DOC || cmd.HEURE_RECEPTION_DOC)
    LIMIT 0 , 30
    Malheuresment, j'obtiens le même résultat. Mais je fais peut-être une erreur dans la syntaxe ...

    Tu peux aussi tenter avec GROUP BY :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SELECT msg.UNB, msg.UNOA, cmd.BGM, cmd.NBLIGNES, cmd.DATE_RECEPTION_DOC, cmd.HEURE_RECEPTION_DOC, cmd.CODE_STATUT_1, cmd.CODE_STATUT_2, cmd.TYPE_MESSAGE
    FROM message msg, commande cmd, compte com
    WHERE cmd.DATE_RECEPTION_DOC >= '051013'
    AND cmd.DATE_RECEPTION_DOC <= '051013'
    AND cmd.NADDP = com.NADDP
    AND com.PAYS = 'NL'
    AND com.CODE_SUPPLIER IN ('M')
    AND msg.ID_MESSAGE = cmd.ID_MESSAGE
    GROUP BY DATE_RECEPTION_DOC
    ORDER BY cmd.HEURE_RECEPTION_DOC
    LIMIT 0 , 30
    Dans ce cas là, le GROUP BY regroupe toutes mes dates identiques en une malheureusement.
    J'ai essayer en faisant GROUP BY( DATE_RECEPTION_DOC AND ORDER_BY(HEURE_RECEPTION_DOC)), mais là j'ai une erreur


    Ma version de mysql est 4.1.9
    tout le monde est d'accord pour critiquer la pensée unique

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    801
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 801
    Points : 314
    Points
    314
    Par défaut
    Ah ba finalement j'ai toruvé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SELECT msg.UNB, msg.UNOA, cmd.BGM, cmd.NBLIGNES, cmd.DATE_RECEPTION_DOC, cmd.HEURE_RECEPTION_DOC, cmd.CODE_STATUT_1, cmd.CODE_STATUT_2, cmd.TYPE_MESSAGE
    FROM message_in msg, commande_in cmd, compte com
    WHERE cmd.DATE_RECEPTION_DOC >= '051014'
    AND cmd.DATE_RECEPTION_DOC <= '051014'
    AND cmd.NADDP = com.NADDP
    AND com.PAYS = 'NL'
    AND com.CODE_SUPPLIER
    IN (
    'M'
    )
    AND msg.ID_MESSAGE = cmd.ID_MESSAGE
    ORDER BY cmd.DATE_RECEPTION_DOC, cmd.HEURE_RECEPTION_DOC, cmd.BGM
    Le BGM est unique et permet donc de différencier deux enregistrement qui aurait la même date et la même heure de reception.

    Voilà, bonne journée à tous !!!!
    et bon week end !!
    tout le monde est d'accord pour critiquer la pensée unique

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 29/06/2011, 20h03
  2. [Requête] order by difficile sur deux champs
    Par new_wave dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 28/09/2006, 17h02
  3. Requête bizarre ... Order by sur 2 champs
    Par MatthieuQ dans le forum Langage SQL
    Réponses: 9
    Dernier message: 10/06/2004, 14h38
  4. Faire un ORDER BY sur un champ
    Par Jeankiki dans le forum Bases de données
    Réponses: 3
    Dernier message: 02/05/2004, 23h59
  5. [CR] Problème de sélection sur un champ date
    Par noluc dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 21/11/2003, 16h56

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