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

Langage SQL Discussion :

Trier une INNER JOIN?


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2004
    Messages : 13
    Points : 8
    Points
    8
    Par défaut Trier une INNER JOIN?
    Bonjour tout le monde,

    J'ai un petit souci sur une jointure SQL...

    En gros j'ai deux tables, comments et entries, en chaque entree a donc plusieurs comments. Mon but est de selectionner les entrees mais en les triant selon la date de leur dernier commentaire (Donc dans la table comment)

    Au lieu de blablater je vous la mets:

    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
    SELECT
                            entries.subject,
                            entries.entries_id,
                            entries.last_update_user_id,
                            DATE_FORMAT(entries.date_made,"%H %i") AS date_made2,
     
                            comments.date_added as date_update,                   
     
                            FROM entries, comments
     
                            AND comments.entries_id = entries.entries_id
     
                            GROUP BY entries_id
     
                            ORDER BY
                            date_update
     
                            DESC
    En gros, mon souci, c'est que oui, la requete ordonne bien par comments.date_update, mais le probleme c'est que les comments, il y en a plusieurs, et je voudrais que cette date_update soit la derniere en date... En fait, j'ai plusieurs comments pour une entrees, et je voudrais simplement trier les entrees selon la date de dernier commentaire.

    Une idee? Je suppose que c'est une simple ligne a ajouter... Mais je coince. Je suis pas hyper a l'aise avec les JOIN

    Merci

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 388
    Points
    18 388
    Par défaut
    Quel est votre SGBD ?

  3. #3
    Membre éclairé Avatar de Arkhena
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 552
    Points : 769
    Points
    769
    Par défaut
    Bonjour,

    Votre clause GROUP BY n'est pas conforme au standard SQL. Comme vous n'avez pas relevé d'erreur, je suppose que vous utilisez mySQL qui permet ce genre de syntaxe.

    Pour avoir la date du dernier commentaire, il faut rechercher le MAX de la date

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT e.subject, e.entries_id, e.last_update_user_id, DATE_FORMAT(e.date_made,"%H %i") AS date_made2,                     MAX(c.date_added) AS date_dernier_com,                   
      FROM entries e INNER JOIN comments c ON c.entries_id = e.entries_id
      GROUP BY e.subject, e.entries_id, e.last_update_user_id, date_made2,
      ORDER BY date_dernier_com DESC
    Cordialement,

    Arkhena

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2004
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Bonjour, et merci pour ces reponses rapides.
    Desole de ne pas avoir precise Waldar, je travaille en MySQL.

    Pour Arkhena, merci de ta reponse. Je reste un peu sceptique sur la non standardisation de mon GROUP BY, c'est pourtant bien ce que je veux faire, grouper le tout par entries_id pour qu'il n'y ait pas de duplicatas?

    Et pour le MAX(), ca me chamboule encore plus les resultats. Sans, les resultats affiches sont au moins tries, mais le probleme c'est que les dates prises sont plus ou moins des dates aleatoires dans les commentaires, mais ce qui est affiche est bien trie.

    Si je rajoute le max, c'est l'anarchie par contre, j'ai des posts vraiment anciens qui ressortent...

    J'ai poste ma version sans l'INNER JOIN reelle mais avec des virgules, avant de lire un debat qui a l'air de dire que l'INNER JOIN est le plus utilise maintenant

    Merci en tout cas, mais je n'ai pas l'impression que le MAX() resolve mon probleme

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2004
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Recoucou,

    Bon, j'essaie d'attaquer selon un autre angle, avec un SUBSELECT. Pas de GROUP BY, une requete plus simple. Mais je dois faire ma sous requete avant le WHERE, et je n'ai jamais fait ca, j'avoue que je ne sais pas si je peux reellement.
    Voici donc ce a quoi j'arrive pour l'instant:

    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
     
    SELECT
     
    entries.entries_id AS entries_id,
     
    DATE_FORMAT(entries.date_made,'%d/%m/%Y - %H:%i') AS date_made2,
     
    (SELECT date_added FROM comments WHERE comments.entries_id = entries_id ORDER BY date_added DESC LIMIT 1) AS date_update_c,
    DATE_FORMAT(date_update_c,'%d/%m/%Y - %H:%i') as date_update2
     
    FROM entries
     
    WHERE entries.status = 0
     
    ORDER BY date_update_c DESC
     
    LIMIT 1
    Mais je me retrouve avec un:

    Unknown column 'date_update_c' in 'field list'
    J'avoue que je ne comprends pas pourquoi mon AS ne fonctionne pas ici?

    Merci

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Cherchez plutôt pourquoi la solution proposée par Arkhena ne vous donne pas le résultat voulu, d'après votre description ça semble la plus simple et la plus adaptée.
    Peut être qu'avec un exemple des données dans vos tables, la requete exacte que vous avez lancée, et les données en sortie, on y verrait plus clair.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2004
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    Bonjour et merci,

    Les autres developpeurs du projet ont l'air de vouloir utiliser des sous selection... Je voudrais donc simplement savoir si ma syntaxe est correcte, parce que visiblement la variable n'est pas passee avant le where, il me dit clairement que c'est une variable inconnue...

    Merci beaucoup en tout cas, je continue d'essayer avec la solution d'Arkhena pendant ce temps

  8. #8
    Membre éprouvé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    861
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 861
    Points : 965
    Points
    965
    Par défaut
    Vous ne pouvez pas utiliser un alias que vous venez de définir dans un même SELECT. Il faut réutiliser l'expression complète.

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2004
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    D'accord, je ne savais pas vraiment.

    Merci beaucoup a tous les deux en tout cas, les deux solutions ont l'air de donner quelquechose de concluant, plus que quelques details a regler.


    Merci!

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

Discussions similaires

  1. Problème avec une inner join
    Par Zikas-r dans le forum Requêtes
    Réponses: 8
    Dernier message: 20/03/2009, 13h55
  2. [SQL] Requête dans une requête...avec des INNER JOIN!
    Par PedroBD dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 06/04/2006, 08h26
  3. INNER JOIN sur une requete UPDATE
    Par Immobilis dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 06/03/2006, 14h05
  4. une requête avec plusieurs INNER JOIN, cmt faire ?
    Par elhosni dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 10/01/2006, 17h55
  5. Erreur lors d'une requete INNER JOIN
    Par k-lendos dans le forum Langage SQL
    Réponses: 2
    Dernier message: 17/03/2004, 15h09

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