Page 1 sur 1

Probleme de doublon

Posté : 30 avr. 2007, 17:18
par djtec
Rebonjour

Voila je voudrais mettre tout les auteurs de mes articles dans un select pour pouvoir faire une recherche rapide par auteur

Voici ma requete
	 <select name="auteur">
<?  
 include('config.php');
 
 if($ordre != "auteur ASC" AND $ordre != "auteur DESC") 
 {
 $ordre = "id ".$ordre;
 }

 // requête SQL
 $sql = "SELECT * FROM ".$prefixe."_articles ORDER BY $ordre";

 // on envoie la requête 
 $req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 

 while($data = mysql_fetch_array($req)) 
 {
 echo'<option value="'.stripslashes($data['auteur']).'">'.stripslashes($data['auteur']).'</option>';
 }	

 mysql_close();
?>
	 </select> <input type="submit" name="submit" value="Ok">
Le problème que j'ai c'est que si l'auteur a posté 10fois il apparait 10fois dans le select et je voudrais qu'il napparaisse qu'une seul fois

merci d'avance

Posté : 30 avr. 2007, 17:40
par @rthur
Bonjour,

Jettes un oeil du côté de la clause DISTINCT de MySQL
http://dev.mysql.com/doc/refman/5.0/en/ ... #id2866510

Posté : 30 avr. 2007, 17:41
par zeus
regarde du côté de SELECT DISTINCT ;)

PS : petit conseil, évite le SELECT *, tu remontes potentiellement beaucoup de données pour rien. le SELECT chp1, chp2, chp3 permet de mieux maitriser ce qui est remonté, donc de réduire le travail de ton serveur de données, de ton serveur apache et de limiter la mémoire utilisée.
De plus, avec le DISTINCT, il ne faudra que le nom de l'auteur dans le SELECT

Posté : 30 avr. 2007, 18:19
par djtec
J'ai regardé le lien de @rthur pour les DISTINCT mais j'ai pas compris comment on s'en sert

Désolé mais je comprend pas l'anglais :wink:

Posté : 02 mai 2007, 12:04
par Ryle
Le DISTINCT te permet de dire que tu ne veux pas que les lignes d'enregistrements identiques soient répétées :) Ainsi, si tu as 3 fois le même nom d'auteur pour 3 livres différents, un distinct sur le nom d'auteur ne te le ramènera qu'une fois.

Quant à l'utilisation, même sans comprendre l'anglais, tu as un exemple dès le début de la doc :
SELECT
[ALL | DISTINCT | DISTINCTROW ]
select_expr, ...
FROM table_references
Il te suffit donc de mettre l'instruction distinct avant la liste des champs dont tu as besoin pour qu'il supprime les doublons :)

Nota : Comme le signal zeus, il est préférable de lister les champs que d'utiliser "SELECT *", d'autant que cela a une importance pour le distinct : Si tu as 3 fois le même nom d'auteur pour 3 livres différents, un distinct sur le nom d'auteur et sur le nom du livre, te ramènera les 3 enregistrements, puisqu'ils sont, de part le nom du livre, tous différents :)