Problème avec clause DISTINCT dans requête SQL

WRInaute passionné
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:
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 :?:
 
WRInaute occasionnel
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
 
WRInaute accro
scores a dit:
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.
 
WRInaute occasionnel
jcaron a dit:
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
 
WRInaute passionné
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 :-)
 
Discussions similaires
Haut