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 :

Tri multi colonnes


Sujet :

Requêtes MySQL

  1. #1
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut Tri multi colonnes
    Bonjour à tous,

    je rencontre un problème de tri en apparence simple , mais auquel je ne trouve pas de solution.

    J'ai une table qui regroupe des actions. Chaque action à une date et trois temps possible. Les temps peuvent être de "jour" , de "nuit" ou de "dep". Une action peu avoir un , 2 ou 3 temps défini :
    Code shell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    +----+------------+----------+----------+----------+
    | id | dateaction | jour     | nuit     | dep      |
    +----+------------+----------+----------+----------+
    |  4 | 2015-03-29 | NULL     | NULL     | 14:00:00 |
    |  5 | 2015-03-29 | NULL     | 23:00:00 | NULL     |
    |  2 | 2015-03-29 | 08:00:00 | NULL     | NULL     |
    |  1 | 2015-03-29 | 09:00:00 | NULL     | NULL     |
    |  3 | 2015-03-29 | 19:00:00 | NULL     | NULL     |
    |  6 | 2015-03-30 | 14:00:00 | NULL     | NULL     |
    +----+------------+----------+----------+----------+

    J'aimerais trier mes actions par date (pas de soucis) mais aussi par temps. Trier sur un temps ne pose pas de problème mais dans l'exemple ci dessus j'ai trié comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM test ORDER BY dateaction,jour ASC
    Du coup les enregistrements sans temps "jour" se retrouve en tête alors que leur autre temps sont pourtant supérieur.
    Pour essayer d'être plus clair la ligne d'id 4 devrait par exemple être entre 1 et 3.

    Est il possible de trier les enregistrement afin que quelque soit le champs de temps spécifié l'ordre soit respecté (du temps le plus petit au plus grand) ?

    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
    CREATE TABLE IF NOT EXISTS `test` (
    `id` int(10) unsigned NOT NULL,
      `dateaction` date NOT NULL,
      `jour` time DEFAULT NULL,
      `nuit` time DEFAULT NULL,
      `dep` time DEFAULT NULL
    ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
     
    --
    -- Contenu de la table `test`
    --
     
    INSERT INTO `test` (`id`, `dateaction`, `jour`, `nuit`, `dep`) VALUES
    (1, '2015-03-29', '09:00:00', NULL, NULL),
    (2, '2015-03-29', '08:00:00', NULL, NULL),
    (3, '2015-03-29', '19:00:00', NULL, NULL),
    (4, '2015-03-29', NULL, NULL, '14:00:00'),
    (5, '2015-03-29', NULL, '23:00:00', NULL),
    (6, '2015-03-30', '14:00:00', NULL, NULL);
    Merci
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Dans votre exemple, le temps dep est entre jour et nuit. Si c'est toujours le cas, vous pouvez utiliser COALESCE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT -- les colonnes nécessaires et pas étoile ! 
    FROM test 
    ORDER BY dateaction, COALESCE(jour, dep, nuit) ASC
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    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 !

  3. #3
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Merci , c'est parfait.
    J'oublie trop souvent COALESCE et encore plus qu'on peut tout à fait utiliser des fonctions partout dans la requête
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

Discussions similaires

  1. Tri multi-niveau sur 2 colonnes
    Par pwetzou dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 17/02/2015, 17h29
  2. Tri multi-threadé
    Par Tifauv' dans le forum C
    Réponses: 8
    Dernier message: 28/06/2007, 09h00
  3. [VB6]Tri multi-colonnes sur tableau de structure
    Par ELGUEVEL dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 17/02/2006, 08h02
  4. [JTable] Tri des colonnes
    Par djskyz dans le forum Composants
    Réponses: 10
    Dernier message: 17/03/2005, 10h14
  5. Tri des colonnes d'une DBGRID
    Par Atrebate62 dans le forum Bases de données
    Réponses: 3
    Dernier message: 31/05/2004, 12h20

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