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

  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

  7. #7
    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
    Je n'ai pas compris ce que tu voulais faire, mais je crois que tu as créé un monstre.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  8. #8
    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
    Pareil pas tout compris, mais tant que tu arrive a ton but c'est l'essentiel.

    Mais je pense que ta requête va être un peu lourde quand tu aura beaucoup de données....

  9. #9
    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
    Bonjour,

    J'ai presque 200000 entrées et la requête est assez rapide.

+ 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