par
sadeq » 30 nov. 2005, 16:26
Le mot-clé "DISTINCT" veut dire "ligne unique" pour SQL et non "valeur unique de champ". C'est pour celà que DISTINCT doit être appliqué à la ligne de sortie et non à chaque champ de la ligne.
L'écriture correcte est :
SELECT DISTINCT champ1, champ2,.... FROM table
Mais il faut encore préciser, et justement pour ton cas, que DISTINCT élimine les doublons de lignes où toutes les valeurs des champs se répètent.
Exemple :
Tuple sans DISTINCT :
- A1, B1, C1
A1, B1, C1
A1, B1, C2
A1, B1, C2
A1, B2, C1
devient avec le DISTINCT :
- A1, B1, C1
A1, B1, C2
A1, B2, C1
Autrement dit, si tu applique le DISTINCT à ta requête :
Code : Tout sélectionner
SELECT DISTINCT p.post_id, p.poster_id, username, user_id, t.topic_id, t.topic_title ...
Elle doit éliminer les lignes doublons et notamment les t.topic_title en double si et seulement si les valeurs
p.post_id, p.poster_id, username, user_id, t.topic_id se répetent aussi quand
t.topic_title se répete.
Préconisation:
Toutefois, si tu veux récupèrer les titres uniques des topic ainsi que leurs id, il faut les chercher dans leur table "frm_topic" là où ils sont uniques.
ou bien, si c'est pour des soucis d'affichage, n'afficher le titre qu'une seule fois quand il change lors du parcours du résultat de la requête sous PHP.
Le mot-clé "DISTINCT" veut dire "ligne unique" pour SQL et non "valeur unique de champ". C'est pour celà que DISTINCT doit être appliqué à la ligne de sortie et non à chaque champ de la ligne.
L'écriture correcte est :
[b]SELECT DISTINCT champ1, champ2,.... FROM table[/b]
Mais il faut encore préciser, et justement pour ton cas, que DISTINCT élimine les doublons de lignes où toutes les valeurs des champs se répètent.
[b]Exemple : [/b]
Tuple sans DISTINCT :
[list]A1, B1, C1
A1, B1, C1
A1, B1, C2
A1, B1, C2
A1, B2, C1[/list]
devient avec le DISTINCT :
[list]A1, B1, C1
A1, B1, C2
A1, B2, C1[/list]
Autrement dit, si tu applique le DISTINCT à ta requête :
[code]SELECT DISTINCT p.post_id, p.poster_id, username, user_id, t.topic_id, t.topic_title ...[/code]
Elle doit éliminer les lignes doublons et notamment les t.topic_title en double si et seulement si les valeurs [b]p.post_id, p.poster_id, username, user_id, t.topic_id[/b] se répetent aussi quand [b]t.topic_title[/b] se répete.
[b]Préconisation:[/b]
Toutefois, si tu veux récupèrer les titres uniques des topic ainsi que leurs id, il faut les chercher dans leur table "frm_topic" là où ils sont uniques.
ou bien, si c'est pour des soucis d'affichage, n'afficher le titre qu'une seule fois quand il change lors du parcours du résultat de la requête sous PHP.