requete hardue

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : requete hardue

par VaN » 30 nov. 2005, 16:54

C'est bon j'ai reussi à recuperer les infos comme je voulais. merci sadeq pour cette info sur l'utilisation du DISTINCT

par sadeq » 30 nov. 2005, 16:38

Oui, la solution la plus simple est décrite dans le message suivant :
http://www.phpfrance.com/forums/voir_su ... texte-.php

par VaN » 30 nov. 2005, 16:36

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.
Ah oui mais justement, p.post_id etant un identifiant unique, il est en auto increment, il y'a donc aucune chance que le DISTINCT me coup les lignes dont t.topic_title et t.topic_id sont identiques: /

Il y'a t'il une autre solution ?

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.

requete hardue

par VaN » 30 nov. 2005, 16:04

$sql_get_threads = 	"SELECT p.post_id, p.poster_id, username, user_id, t.topic_id, t.topic_title
								FROM frm_posts AS p, frm_topics AS t, frm_users AS u
								WHERE u.username LIKE '%GG%' 
								AND u.username LIKE '%".$result_get_pseudo['pseudo']."%'
								AND u.username LIKE '%|%'
								AND u.user_id = p.poster_id
								AND p.topic_id = t.topic_id
								AND (CHAR_LENGTH(u.username)='".($long+5)."' OR CHAR_LENGTH(u.username)='".($long+6)."')
								ORDER  BY post_id DESC 
								LIMIT 0 , 3";
J'aimerais récupérer post_id, poster_id, username, user_id, topic_id, topic_title. Mais j'aimerais récuperer seulement un seul exemplaire de topic_title (et donc topic_ic), si le topic est le meme, histoire que ce titre ne soit pas répété dans mon while() qui suit.

lorsque je met
"SELECT p.post_id, p.poster_id, username, user_id, 
								DISTINCT t.topic_id, DISTINCT t.topic_title
								FROM frm_posts AS p, frm_topics AS t, frm_users AS u
, il me sors l'erreur #1064 - Erreur de syntaxe près de 'DISTINCT t.topic_id, DISTINCT t.topic_title
FROM frm_posts AS p' à la ligne 1.

Faut-il faire autrement ? (la structure des tables est celle de phpBB.