Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/04/2011, 15h40   #1
Membre chevronné
 
Avatar de Julien Bodin
 
Homme Julien Bodin
Ingénieur développement logiciels
Inscription : février 2009
Messages : 442
Détails du profil
Informations personnelles :
Nom : Homme Julien Bodin
Âge : 25
Localisation : France, Calvados (Basse Normandie)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2009
Messages : 442
Points : 663
Points : 663
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 :
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
Julien Bodin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/04/2011, 15h46   #2
Membre habitué
 
Étudiant
Inscription : avril 2008
Messages : 275
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2008
Messages : 275
Points : 139
Points : 139
Salut,

En utilisant DISTINCT ?
Tidus159 est déconnecté   Envoyer un message privé Réponse avec citation 11
Vieux 12/04/2011, 18h24   #3
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 442
Points : 10 442
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Un agrégat devrait faire l'affaire :
Code sql :
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
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 12/04/2011, 18h28   #4
Membre chevronné
 
Avatar de Julien Bodin
 
Homme Julien Bodin
Ingénieur développement logiciels
Inscription : février 2009
Messages : 442
Détails du profil
Informations personnelles :
Nom : Homme Julien Bodin
Âge : 25
Localisation : France, Calvados (Basse Normandie)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2009
Messages : 442
Points : 663
Points : 663
Citation:
Envoyé par Waldar Voir le message
Un agrégat devrait faire l'affaire :
Code sql :
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).
Julien Bodin est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h56.


 
 
 
 
Partenaires

Hébergement Web