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 :

[MySQL] Sélection selon historique


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    837
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2003
    Messages : 837
    Par défaut [MySQL] Sélection selon historique
    Bonjour à tous,

    Tout d'abord, désolé pour le titre un peu flou... je ne vois pas trop quoi mettre de plus explicite
    Alors voilà, je suis en train de chercher depuis un moment une requete et je n'arrive franchement pas à mettre la main sur la maniere de la créer. Je m'explique :

    J'ai une table Commentaires avec ces champs :
    id id_post date(je met une vraie heure mais c'est un TS unix)
    1 1 14h00
    2 1 15h00
    3 2 14h00
    4 3 11h00
    5 3 10h00

    Et je cherche à ressortir l'id du plus recent de chaque id_post. En gros on a une date pour chaque et un id_post, je souhaite regrouper par id_post et ressortir pour chaque id_post l'id du plus récent.
    Avec mon exemple de table cela donnerai les id suivant :
    2, 3, 4

    J'ai fouiné comme un malade mais pas moyen de trouver. Avec la clause GROUP BY id_post c'est bien ce que je veux mais il ne me ressort pas le plus recent...
    J'ai ensuite regardé du coté de DISTINCT mais là y'a un truc bizarre on va dire c'est qu'avec distinct on ne peut apparement rien selectionner en plus, c'est à dire que si je fais un DISTINCT id_post, id il va chercher les combinaisons uniques des deux non pas seulement de id_post...

    Si vous avez une idée, je suis archi preneur car là sincerement je ne sais pas comment je vais faire
    Merci d'avance
    ++

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Par défaut
    La gestion des dates est variable selon les SGBD ; merci de respecter les règles et d'indiquer le votre ainsi que sa version

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    837
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2003
    Messages : 837
    Par défaut
    Désolé,

    J'utilise Mysql 4.1.3 et voici la definition de la table :

    id : INT
    id_post : INT
    date : INT (à savoir que vu que ce sont des timestamp unix qui y sont stockés, un simple max(date) donne la date la plus récente.
    Mon problème se pose surtout sur la liaison des deux conditions :
    Chopper le commentaire le plus récent sur chaque id_post

    Merci d'avance
    ++

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Par défaut
    ATTENTION :
    - tu utilises un nom de colonne qui est un mot clé réservé du SQL (DATE).
    Si possible, change le, cela t'évitera de GROS ennuis.
    - je vais te proposer une solution mais attends la confirmation d'un utilisateur plus à l'aise que moi avec ce genre de requêtes pour considérer que ton problème est résolu

    Voici la solution que je te propose en supposant que le couple (id_post, my_date) permet de retrouver l'id associé (cf la jointure).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT A.ID
    FROM   (SELECT   ID_POST,
                     MAX(MY_DATE) MY_DATE
            FROM     COMMENTAIRES
            GROUP BY ID_POST) B,
           COMMENTAIRES A
    WHERE  A.ID_POST = B.ID_POST
           AND A.MY_DATE = B.MY_DATE

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    837
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2003
    Messages : 837
    Par défaut
    Re!

    Alors le soucis c'est que j'avais déja essayé de faire une requete du type SELECT truc FROM (SELECT....)

    Mais sous mysql ce n'est pas encore possible (il me semble que dans les prochaines versions ce sera pris en charge...)

    En attendant j'ai sacrifié la structure de ma BDD au profit d'une gestion plus simple, donc j'ai contourné le probleme si on peut dire...

    Merci quand meme mais je pense qu'il n'y a pas de solution pour mon probleme vis a vis des contraintes imposées par le SGBDR
    Je deleste mais si quelqu'un avait tout de meme une astuce je suis preneur !
    @++

  6. #6
    Membre Expert Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Par défaut
    Bonjour,

    Est ce que cette requete répond a tes besoins ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select id from
    (select id_post,max(date_post)  as date_post from MaTable group by id_post) requete1,
    MaTable where
    requete1.id_post=MaTable.id_post and  MaTable.date_post=requete1.date_post
    bon courage

  7. #7
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Par défaut
    Avec la version 4.1.3 les sous-requêtes sont autorisées :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT *
    FROM Commentaires a
    WHERE NOT EXISTS (SELECT NULL
                      FROM Commentaires b
                      WHERE a.id_post = b.id_post
                      AND a.laDate < b.laDate)

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2003
    Messages
    837
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Février 2003
    Messages : 837
    Par défaut
    Je vais tester cela merci.
    Mais en tout cas, si ce genre de requete est supportée sous mysql, alors c'est qu'elle n'est pas supportée sous phpmyadmin (rubrique SQL) alors

    Encore merci !
    @++

Discussions similaires

  1. [SQL] Sélection selon un paramètre contenant plusieurs valeurs
    Par rainbow14 dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 21/05/2007, 16h15
  2. [MySQL] Aide requête MySQL : sélection aléatoire d'un enregistrement avec critère
    Par iwf-fr dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 07/05/2007, 09h01
  3. [MySQL]traçage d'historique de modification
    Par malbarre dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 30/06/2006, 16h29
  4. [MySQL] Sélection selon code/historique
    Par isa21493 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 01/03/2006, 16h46
  5. Requête de sélection --> Gestion Historique ...
    Par snoopy69 dans le forum Access
    Réponses: 21
    Dernier message: 29/11/2005, 16h10

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