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 :

Regrouper champs identique [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de PIEPLU
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    507
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 507
    Par défaut Regrouper champs identique
    Bonjour,

    J'ai une table 'notification' avec les champs

    id_avis ; id_comment ; id_sujet ; date ;

    ----------------------------------------------

    0 ; 0 ; 4567 ; 26122013 (dans la db, c'est au format timestamp)

    1 ; 0 ; 0 ; 25122013

    0 ; 0 ; 4567 ; 24122013


    Vous voyez que id_sujet est deux fois à deux dates différentes

    Le but étant de regrouper les id_sujet identique par ordre de date DESC

    On devrait donc voir au final plus que la ligne 1 et 2 de l'exemple.



    Merci de votre aide

  2. #2
    Membre éprouvé Avatar de Sakukun
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2011
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2011
    Messages : 74
    Par défaut
    Bonjour,

    Essaye quelque chose comme :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT id_avis, id_comment, id_sujet, max(date) FROM notification GROUP BY id_sujet ORDER BY date DESC;

  3. #3
    Membre éclairé Avatar de PIEPLU
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    507
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 507
    Par défaut
    En changeant quelques trucs, celà donne :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT id_avis, id_comment, id_sujet, MAX( DATE ) 
    FROM Notifications
    WHERE id_user2 =1
    GROUP BY id_sujet
    ORDER BY MAX( DATE ) DESC 
    LIMIT 0 , 30

    C'est pas mal ressortir les données de l'id_sujet. Mais par contre, quand j'ai 0 à id_sujet, ca veut dire que j'ai une valeur dans les autres colonnes, c'est à dire "id_avis ; id_comment" et qu'il faut les traiter.

    Et c'est la que la difficulté arrive je pense

  4. #4
    Membre éprouvé Avatar de Sakukun
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2011
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2011
    Messages : 74
    Par défaut
    Les traiter comment ? Avec les données que tu as tu veux quel résultat ?

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Quel est l'id de cette table ?

    Deux méthodes dans la doc mysql :
    http://dev.mysql.com/doc/refman/5.0/...group-row.html
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  6. #6
    Membre éclairé Avatar de PIEPLU
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    507
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 507
    Par défaut
    Voici la solution finale que j'ai trouvé :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT * FROM ((
    SELECT s.* FROM (SELECT * FROM ma_table ssub WHERE ssub.id_sujet > 0 ORDER BY ssub.date DESC) s GROUP BY s.id_sujet
    ) UNION (
    SELECT l.* FROM (SELECT * FROM ma_table lsub WHERE lsub.id_liste > 0 ORDER BY lsub.date DESC) l GROUP BY l.id_liste
    ) UNION (
    SELECT c.* FROM (SELECT * FROM ma_table csub WHERE csub.id_comment > 0 ORDER BY csub.date DESC) c GROUP BY c.id_comment
    ) UNION (
    SELECT a.* FROM (SELECT * FROM ma_table asub WHERE asub.id_avis > 0 ORDER BY asub.date DESC) a GROUP BY a.id_avis
    ) UNION (
    SELECT p.* FROM (SELECT * FROM ma_table psub WHERE psub.id_avis = 0 AND psub.id_sujet = 0 AND psub.id_liste = 0 AND psub.id_comment = 0 ORDER BY psub.date DESC) p GROUP BY p.id_avis
    )) n
    ORDER BY n.date DESC

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 05/02/2010, 18h55
  2. [MySQL] Regrouper des champs identiques
    Par Sof34 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 24/04/2009, 01h52
  3. regroupement de champs identique
    Par tben08 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 13/10/2007, 10h32
  4. Requete croisant deux champs identiques
    Par sabotage dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/08/2005, 11h59
  5. plusieurs champs identiques en ligne
    Par viviking dans le forum Langage SQL
    Réponses: 12
    Dernier message: 18/06/2004, 11h25

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