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 :

Doublons dans ma requête


Sujet :

Langage SQL

  1. #1
    Membre éclairé Avatar de Julien Bodin
    Homme Profil pro
    Devops
    Inscrit en
    février 2009
    Messages
    473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Devops
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : février 2009
    Messages : 473
    Points : 831
    Points
    831
    Par défaut Doublons dans ma requête
    Bonjour à tous !

    J'ai un petit souci lors de l'écriture d'une petite requête.

    Dans mon application j'ai des sociétés et des utilisateurs. Les utilisateurs ont la possibilité d'ouvrir les fiches des sociétés pour de la consultation.

    Je souhaite mémoriser la date de chaque visite de fiche par un utilisateur de façon à pouvoir afficher la liste des dernières fiches visitées pour chaque utilisateur.

    J'ai donc en gros :
    - Une table societe (id, nom)
    - Une table user (id,nom,prenom)
    - Une table user_read_societe(id_societe, id_user, date_open)

    J'utilise la requête suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT s.id, s.nom, urs.dateopen 
    FROM user_read_societe urs
    INNER JOIN societe s ON urs.id_societe = s.id
    WHERE urs.id_user = ?
    order by urs.dateopen desc
    LIMIT 0,10
    Le truc c'est qu'avec cette requête je n'évite pas les doublons. Et donc si j'ouvre 10 fois d'affilée la même fiche je vais me retrouver avec un résultat de requête qui ne contiendra que la société que j'ai visisté 10 fois, et non pas les 10 dernières sociétés visitées.

    Comment puis-je résoudre ce problème ?

    Merci d'avance pour votre aide

  2. #2
    Membre actif
    Étudiant
    Inscrit en
    avril 2008
    Messages
    311
    Détails du profil
    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : avril 2008
    Messages : 311
    Points : 257
    Points
    257
    Par défaut
    Salut,

    En utilisant DISTINCT ?

  3. #3
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Consultant Teradata
    Inscrit en
    septembre 2008
    Messages
    8 218
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Teradata
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : septembre 2008
    Messages : 8 218
    Points : 17 141
    Points
    17 141
    Par défaut
    Un agrégat devrait faire l'affaire :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      SELECT s.id, s.nom, max(urs.dateopen) as last_open
        FROM user_read_societe as urs
             INNER JOIN societe as s
               ON s.id = urs.id_societe
       WHERE urs.id_user = ?
    GROUP BY s.id, s.nom
    ORDER BY last_open DESC
       LIMIT 0,10

  4. #4
    Membre éclairé Avatar de Julien Bodin
    Homme Profil pro
    Devops
    Inscrit en
    février 2009
    Messages
    473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Devops
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : février 2009
    Messages : 473
    Points : 831
    Points
    831
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Un agrégat devrait faire l'affaire :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      SELECT s.id, s.nom, max(urs.dateopen) as last_open
        FROM user_read_societe as urs
             INNER JOIN societe as s
               ON s.id = urs.id_societe
       WHERE urs.id_user = ?
    GROUP BY s.id, s.nom
    ORDER BY last_open DESC
       LIMIT 0,10
    Ah oui, en effet, je n'y avais pas pensé. Merci beaucoup !

    @Tidus159: En fait l'opérateur DISTINCT fonctionne sur toute la ligne du select, et toutes mes lignes sont distinctes (la colonne urs.dateopen est toujours différente).

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

Discussions similaires

  1. Eviter les doublons dans une requête.
    Par Smint dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 22/03/2017, 17h17
  2. Fusionner sans doublons dans une requète
    Par Michaël HENNEQUIN dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 19/02/2009, 17h27
  3. Problème de doublons dans une requète complexe
    Par noakiss dans le forum Langage SQL
    Réponses: 7
    Dernier message: 20/03/2008, 10h19
  4. Doublons dans une requète complexe
    Par noakiss dans le forum VBA Access
    Réponses: 0
    Dernier message: 19/03/2008, 16h30
  5. problème de doublon dans ma requête
    Par ildan dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 15/06/2007, 18h05

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