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

PHP & Base de données Discussion :

Trier les données d'une table en fonction de la date d'une autre


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par défaut Trier les données d'une table en fonction de la date d'une autre
    Bonjour à tous,

    Soit la table dossiers :
    id nom date
    1 Toto 2023-11-01
    2 Tata 2023-11-02
    3 Tutu 2023-11-03


    et la table comments
    id id_dossier comment datetime user
    1 2 bla bla 2023-11-02 09:00:00 user
    2 2 bla bla 2023-11-02 09:30:00 admin
    3 2 bla bla 2023-11-02 19:30:00 user
    4 1 bla bla 2023-11-01 19:30:00 user
    5 1 bla bla 2023-11-01 20:00:00 admin
    6 3 bla bla 2023-11-03 08:30:00 user


    Comment trier dossier en fonction du champ datetime de comments sachant que le dossier qui comporte le dernier commentaire écrit par le user "user" doit s'afficher en 1er et les autres à la suite dans l'ordre de comments.datetime puis user "user" ?

    Dans cet exemple on aurait : 2, 1 et 3

    J'ai fait :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT d.*, c.date FROM dossiers d LEFT JOIN comments c on d.id = c.id_dossier GROUP BY c.id_dossier ORDER BY c.datetime DESC, FIELD(user,'user')

    Mais ce n'est pas bon. J'ai ajouté une clause GROUP BY pour ne pas que la boucle affiche les dossiers autant de fois qu'ils sont de commentaires...
    Bref je sèche.
    Merci de votre aide.

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 322
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 322
    Billets dans le blog
    17
    Par défaut
    Il y a différentes solutions, plus ou moins directes.

    Cela va dépendre des colonnes que tu souhaites récupérer.

    Quelles sont-elles ?

  3. #3
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par défaut
    Bonjour,

    Je souhaite récupérer tous les champs de la table dossiers. De plus, il y a une clause WHERE dossiers.statut NOT IN(x,y) que je n'ai pas fait figurer dans mon exemple car cela ne me semblait pas utile.

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 599
    Billets dans le blog
    10
    Par défaut
    il faut conditionner le tri en utilisant un CASE dans la clause ORDER BY

  5. #5
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par défaut
    Bonjour,

    Aurais tu un exemple dans le cas de ma requête avec jointure ? Je regarde le sujet mais il n'y a pas grand chose...

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 599
    Billets dans le blog
    10
    Par défaut
    Voici

    Création du jeu d'essai avec deux CTE :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    with DO_dossier (DO_ident, DO_nom, DO_date) as
        (select 1, 'tata', '2023-11-01'   union all
         select 2, 'toto', '2023-11-02'   union all
         select 3, 'tutu', '2023-11-03'
        )
       , CO_comment (Co_ident, DO_ident, CO_texte, CO_dth, CO_user) as
        (select 1, 2, 'bla bla bla', '2023-11-02 18:15:00', 'user'   union all
         select 2, 2, 'truc muche',  '2023-11-02 09:30:00', 'admin'  union all
         select 3, 2, 'bidule',      '2023-11-02 16:20:00', 'user'   union all
         select 4, 1, 'coucou',      '2023-11-01 19:30:00', 'user'   union all
         select 5, 1, 'azerty',      '2023-11-01 20:00:00', 'martin' union all
         select 6, 3, 'commentaire', '2023-11-03 08:30:00', 'josé'   union all
         select 7, 3, 'des trucs',   '2023-11-03 17:44:00', 'simone' union all  
         select 8, 3, 'tagada',      '2023-11-03 16:31:00', 'user'     
        )


    Puis la requête :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    select DO.DO_nom
         , DO.DO_date
         , CO.CO_texte
         , CO.CO_dth
         , CO_user
    from  DO_dossier as DO
    inner join
          CO_comment as CO
       on CO.DO_ident = DO.DO_ident
    order by DO.DO_nom asc
           , case when CO.CO_user='user' then 1
                  else CO.CO_dth
             end asc
        , CO_dth desc


    Et enfin, le résultat :

    Nom : Sans titre.png
Affichages : 125
Taille : 12,0 Ko

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

Discussions similaires

  1. [CR 8] Trier les données d'une table croisée sous crystal report
    Par uroka dans le forum SAP Crystal Reports
    Réponses: 5
    Dernier message: 27/11/2012, 15h33
  2. Réponses: 9
    Dernier message: 21/02/2008, 10h13
  3. Réponses: 3
    Dernier message: 09/04/2006, 12h58
  4. Réponses: 1
    Dernier message: 20/12/2005, 15h56
  5. récupérer juste les données d'une autre table
    Par rangernoir dans le forum Access
    Réponses: 5
    Dernier message: 13/09/2005, 14h52

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