Probleme de doublon

Eléphant du PHP | 451 Messages

30 avr. 2007, 17:18

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

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

30 avr. 2007, 17:40

Bonjour,

Jettes un oeil du côté de la clause DISTINCT de MySQL
http://dev.mysql.com/doc/refman/5.0/en/ ... #id2866510
Quand tout le reste a échoué, lisez le mode d'emploi...

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

30 avr. 2007, 17:41

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
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 451 Messages

30 avr. 2007, 18:19

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:

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

02 mai 2007, 12:04

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 :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...