Problème avec clause DISTINCT dans requête SQL

Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics


Meeuuuhhh
WRInaute accro
WRInaute accro
 
Messages: 1795
Inscription: Lun Jan 08, 2007 21:48

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 impliqué
WRInaute impliqué
 
Messages: 467
Inscription: Dim Nov 24, 2002 19:12

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: 1196
Inscription: Ven Fév 13, 2004 20:33

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 impliqué
WRInaute impliqué
 
Messages: 467
Inscription: Dim Nov 24, 2002 19:12

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: 3062
Inscription: Jeu Sep 14, 2006 4:53

Message le Dim Avr 22, 2007 12:53

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


Meeuuuhhh
WRInaute accro
WRInaute accro
 
Messages: 1795
Inscription: Lun Jan 08, 2007 21:48

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 :-)


Formation recommandée sur ce thème :

Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

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