Problème avec clause DISTINCT dans requête SQL


Meeuuuhhh
WRInaute passionné
WRInaute passionné
 
Messages: 2046
Inscription: 8 Jan 2007

Problème avec clause DISTINCT dans requête SQL

Message le Dim Avr 22, 2007 0:41

Bonjour,

Voilà j'ai plusieurs tuples identiques et cette requête est censée m'envoyer un seul exemplaire de chaque, mais non ça me les envoit tous :

Code: Tout sélectionner
SELECT
DISTINCT titre,
id,
nbrCommentaire,
TitreDernierMessage
FROM textes
WHERE
urlCategorie = '".$categorie."'
ORDER BY titre


Si dans la requête je ne met que SELECT DISTINCT titre FROM textes, c'est bon. Mais dans l'exemple au dessus, ça ne fonctionne pas.

Savez-vous comment faire :?:


scores
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 496
Inscription: 24 Nov 2002

Message le Dim Avr 22, 2007 7:35

et ouais
si "id" est unique pour chaque ligne, alors c'est normal que tu vois les doublons,

vaut mieux peut être utiliser GROUP BY, si tu veux pouvoir recuperer le id tout en supprimant les doublons

SELECT titre,
id,
nbrCommentaire,
TitreDernierMessage
FROM textes
WHERE
urlCategorie = '".$categorie."'
GROUP BY titre ORDER BY titre

jcaron
WRInaute accro
WRInaute accro
 
Messages: 2686
Inscription: 13 Fév 2004

Message le Dim Avr 22, 2007 10:15

scores a écrit:et ouais
si "id" est unique pour chaque ligne, alors c'est normal que tu vois les doublons,

vaut mieux peut être utiliser GROUP BY, si tu veux pouvoir recuperer le id tout en supprimant les doublons

SELECT titre,
id,
nbrCommentaire,
TitreDernierMessage
FROM textes
WHERE
urlCategorie = '".$categorie."'
GROUP BY titre ORDER BY titre


Eh non, ça ne marchera pas non plus. A partir du moment où tu fais un group by, il faut que toutes les autres colonnes soient aussi dans le group by, ou soient des aggrégats (sum, min, max, count...).

De toutes façons, c'est assez logique: on veut l'ID d'un titre mais on ne veut qu'un seul titre alors qu'il y a plusieurs IDs avec le même titre: quelle ID doit-on retourner? Il faut être plus précis dans le choix des enregistrements qu'on veut obtenir, la BDD ne peut pas deviner...

Jacques.


scores
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 496
Inscription: 24 Nov 2002

Message le Dim Avr 22, 2007 10:53

jcaron a écrit:Eh non, ça ne marchera pas non plus. A partir du moment où tu fais un group by, il faut que toutes les autres colonnes soient aussi dans le group by, ou soient des aggrégats (sum, min, max, count...).


Euh je vois pas trop là,
moi j convertis ya longtemps mes requetes distinct en GROUP BY en ne mettant qu'une seule colone (ou 2-3) groupée, j'ai pas de problème !

et ca le mérite de reduire le CPU contrairement au DISTINCT.

Par contre c'est vrai qu'une requete avec count () etc. je suis obligé de passé en distinct


YoyoS
WRInaute accro
WRInaute accro
 
Messages: 3835
Inscription: 14 Sep 2006

Message le Dim Avr 22, 2007 12:53

peux-tu nous donner un extrait de ta table svp ?


Meeuuuhhh
WRInaute passionné
WRInaute passionné
 
Messages: 2046
Inscription: 8 Jan 2007

Message le Dim Avr 22, 2007 14:36

Salut,

Bon bah j'ai effacé la base, et j'ai refait les insertions pour corriger le problème donc on va éviter le super gros débat sur les DISTINCT/GROUP BY ;-)


Merci à vous pour l'intérêt porté à ce modeste topic :-)


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 3 invités