Page 1 sur 4

Probleme de array_unique dans une liste

Posté : 01 sept. 2005, 19:54
par muriel
Bonjour à tous,

J'ai un moteur de recherche avec une liste qui contient les memes valeurs et je desirai enlever les doublons, voici mon code:
<? 
$query = "SELECT annonceur FROM commandes ORDER BY annonceur ASC"; 
$result = mysql_query($query);
?>
<form name="list" method="post" action="<? echo $URL; ?> ">
                          <select name="annonceur" size="1">
   <? while ($val = mysql_fetch_array($result)) 
   { ?>
      <option><? echo $val["annonceur"]; ?></option>
  <? } ?>
   </select>
   <input type="Submit" value="Envoyer">
</form>
<? mysql_close(); ?>



pour le moment à l'affichage de la liste ça donne ceci :

1 = toto
2 = toto
3 = toto
5 = titi
6 = titi


je voudrais obtenir :
1 = toto
2 = titi

d'avance merci de votre aide,

Posté : 01 sept. 2005, 20:03
par HD
essaie
SELECT UNIQUE annonceur FROM commandes ORDER BY annonceur ASC

Posté : 01 sept. 2005, 20:05
par karushi
Salut Muriel,

Il existe une requète pour éliminer les doublons qui est:

SELECT DISTINCT attibut FROM relation

En espèrant que ce-ci t'aide...

Posté : 01 sept. 2005, 20:18
par muriel
merci à karushi et HD pour vos reponses super rapide, le probleme a été resolu avec le code de karushi
SELECT DISTINCT attibut FROM relation  
avec celui de HD
SELECT UNIQUE annonceur FROM commandes ORDER BY annonceur ASC 
ça n'a pas marché mais c'est vrai que je n'ai pas trop insisté puisque celui de karushi a marché du premier coup.

Encore merci pour vos reponses et du temps que vous m'avez fait gagner.

@++

Posté : 01 sept. 2005, 20:20
par HD
cé rien
n'oublie pas resolu
mais surtout si qq1 peut me dire si SELECT UNIQUE marche bien ce serait sympa
edit : verification faite ca existe bien select unique from. ouf je vais pas me taper la honte devant les copains 8)

Posté : 02 sept. 2005, 17:09
par muriel
bonjour à tous,

juste une petite question suite au topic, j'ai donc un formulaire avec ma liste qui me permet vraiment de ne plus avoir de doublon, mais j'aurais voulu que dans la page qui est appelé je puisse faire la meme chose alors j'ai mis mon code comme ceci est là ça marche tres bien:
$req = 'SELECT DISTINCT annonceur FROM commandes ORDER BY annonceur ASC';
mais le seul probleme c'est que dans ma page je voudrais pouvoir inclure d'autres champs mais si je rajoute apres "SELECT DISTINCT annonceur, client, nom" il me fait la meme chose sur les trois champs alors que je voudrais qu'il puisse le faire que sur le champs annonce, je vous donne mon code pour que vous compreniez mieux:
<?
include("_connexion.php");


$req = 'SELECT DISTINCT annonceur,client,nom FROM commandes ORDER BY annonceur ASC';
$res = mysql_query($req) or die;
$nbl = mysql_num_rows($res); 
$i=0; 
while ($nbl!=$i) 
{ 
$annonceur = mysql_result($res,$i,"annonceur"); 
$client = mysql_result($res,$i,"client"); 
$nom = mysql_result($res,$i,"nom"); 
?>
<table width="100%" border="0">
  <td width="4%<?php echo($annonceur); ?></font></td>
      <td width="5%"><?php echo($client); ?></font></td>
        <td width="4%"><?php echo($nom); ?></font></td>
          </table></td>

<?
$i++; 
}
echo "</table>"; 

mysql_close(); 
?>
et là j'ai un big probleme. Si quelqu'un a une solution à cela, se serait génial, d'avance merci.

Posté : 02 sept. 2005, 17:16
par HD
dans ce cas tu met 2requetes :
$req = 'SELECT DISTINCT annonceur FROM commandes ORDER BY annonceur ASC'; 
$req2 = 'SELECT client,nom FROM commandes
s'il y a des contraintes auquelles j'ai pas fait attention dis le...

Posté : 02 sept. 2005, 17:21
par HD
et bien sur il faudra modifier les lignes suivantes :
$res = mysql_query($req) or die; 
$nbl = mysql_num_rows($res); 
$res2 = mysql_query($req2) or die; 
$nbl2 = mysql_num_rows($res2); 
....
....
....
$client = mysql_result($res2,$i,"client"); 
$nom = mysql_result($res2,$i,"nom"); 
et ainsi de suite

Posté : 02 sept. 2005, 17:55
par muriel
tu es super HD ça fonctionne parfaitement bien, grace à toi je vais pouvoir passer un bon WE, en esperant que se sera de meme pour toi.
je te remercie de ton aide qui me permet de pouvoir arriver au bout de ma petit base de donnée, la semaine prochaine je passe à la partie administrateur que je dois faire, en sachant que c'est la premiere fois que je vais me lancer là dedans, vous n'avez pas fini de me voir, lolll !!!

à tres bientot, je l'espere et encore merci de ta disponibilité.

Posté : 02 sept. 2005, 18:07
par HD
c'est rien
merci et bon we

Posté : 03 sept. 2005, 13:06
par muriel
bonjour HD et à tous les autres,

j'ai un petit probleme avec le dernier code:
$req = 'SELECT DISTINCT annonceur FROM commandes ORDER BY annonceur ASC'; 
$req2 = 'SELECT client,nom FROM commandes 
ça marche tres bien sauf que le champs annonceur lui enleve bien les doublons, mais les champs client et nom lui il ne fait aucune difference il suit à la ligne, je te donne un exemple:

celui ci c'est ma base:
annonceur1=client1=nom1
annonceur1=client2=nom2
annonceur2=client3=nom3
etc...

et l'affichage ce fait avec le nouveau code:
annonceur1=client1=nom1
annonceur2=client2=nom2
etc...

et là ça fait un peu desordre, lolll !!!

alors je verrais bien une variable pour les noms et clients qui dirait que les clients et les nom doivent coincider avec l'id correspondant à l'annonceur qui s'affiche mais je ne sais pas comment je pourrais l'ecrire je suis trop nul.....malheureusement !!!
si tu as une astuce je prends.
merci de ta patience et de ton aide.

@++

Posté : 03 sept. 2005, 14:03
par HD
$req2 = 'SELECT client,nom FROM commandes WHERE id='annonceur1'
tu remplace id et annonceur1 par ce que tu utilise dans ta table

Posté : 03 sept. 2005, 15:16
par muriel
bonjour HD contente que tu sois là, alors ta fonction est parfaite mais j'ai oublié de te signaler que j'avais une fonctions "tous", alors le mieux c'est que je te mette le code et si tu as une solution à ce probleme tu es un veritable genie...
<?
include("_connexion.php");

$req = 'SELECT DISTINCT annonceur,client FROM commandes_2005  WHERE 1 = 1';
if ($annonceur!="tous") 
   $req.= " AND annonceur ='".$annonceur."'"; 
   if ($client!="tous") 
      $req.= " AND client ='".$client."'"; 
   $req.= " ORDER BY annonceur ASC"; 
   $res = mysql_query($req) or die;
$nbl = mysql_num_rows($res); 

$req2 ="SELECT nom,telephone,fax,commercial,portable FROM commandes_2005";
$req2.= " ORDER BY annonceur ASC"; 
$res2 = mysql_query($req2) or die; 
$nbl2 = mysql_num_rows($res2);  
$i=0; 
while ($nbl!=$i) 
{ 
$annonceur = mysql_result($res,$i,"annonceur");
$client = mysql_result($res,$i,"client"); 
$nom = mysql_result($res2,$i,"nom"); 
$telephone = mysql_result($res2,$i,"telephone"); 
?>
        
          <td><?php echo($annonceur); ?></td>
		  <td><?php echo($client); ?></td>
		   <td><?php echo($nom); ?></td>
		   <td><?php echo($telephone); ?></td>		  
<?
$i++; 
}
echo "</table>"; 

mysql_close(); 
?>
comme tu pourras le constater dans ce code il n'y a pas ta derniere formule, je prefere ne pas compliquer plus, en esperant que mon code ne soit pas trop mauvais, et encore merci HD

@++

Posté : 03 sept. 2005, 16:02
par HD
j'essaierai de voir ton probleme apres
mais en attendant c'est qui ce
WHERE 1 = 1'
tu fais du sql injection maintenant :?: :lol:

Posté : 03 sept. 2005, 16:15
par muriel
c'est rien ça sert à rien c'etait juste un essaie de ma part et je l'ai oublié par la suite, je viens de l'enlever et ça marche de la meme maniere alors n'en tiens pas compte, c'etait un oublie de ma part.

je croise les doigts en esperant que tu trouves la solution, bonne chance.

@++