8791 sujets

Développement web côté serveur, CMS

Bonjour,

Je cherche a utiliser la fonction distinct dans un SELECT pour ne récuperer qu'un enregistrement unique par id_user.

Par exemple j'ai une table qui se présente sous cette forme:

id_image / id_user / chemin_image

1 - 1 - "uploads/1-ima.jpg"
2 - 1 - "uploads/1-hgj.jpg"
3 - 2 - "uploads/2-asde.gif"
4 - 3 - "uploads/3-rtge.png"
5 - 3 - "uploads/3-fdsf.gif"

Le but est de récuperer un seul enregistrement (ici une image) par user
1 uploads/1-ima.jpg
2 uploads/2-asde.gif
3 uploads/3-rtge.png

j'ai fait ça

select  DISTINCT id_user, chemin_image 
from users_images order by RAND() DESC

ça ne marche pas ça ne me prend pas uniquement une seule image par user.
Exemple si user 1 a uploadé 2 images, ça me prend les 2 images et pas uniquement 1 image.

Qui voit où se trouve le probleme et qui a la solution ?

Merci d'avance
Modifié par pareto (22 Mar 2010 - 12:21)
Salut,

ben déjà je t'avais donné une solution dans ce post. Smiley rolleyes

Ensuite DISTINCT ne sert pas à ne prendre qu'un enregistrement mais à dédoublonner les résultats.

Il te manque LIMIT 1 à la fin de ta requête pour faire ce que tu veux.
salut, j'ai pas vu le post que tu m'as mis, je vais voir tout de suite...

Je te remercie pour tes réponses.

Par contre le probleme qui se pose quand je mets LIMIT 1 c'est qu'il ne me prend qu'une réponse car je suis dans une boucle.


require('connexion.inc.php'); 
$requete="select  DISTINCT id_user, chemin_image from users_images order by RAND() DESC ";
$resultat=mysql_query($requete);
while($data = mysql_fetch_assoc($resultat))
 
  {
  $tablo[]=$data;
  
  }
  //je veux un affichage sur 3 colonnes 
  $nbcol=3;
  echo '<table>';
// j'ai besoin de 27 images
   $nb=27;
for($i=0;$i<$nb;$i++){

  //les valeurs à afficher
  $valeur1=$tablo[$i]['chemin_image'];
$taille= getimagesize($valeur1);
$affiche=100; 

            $image='$valeur1'; // adresse de l'image 
            $taille=getimagesize($valeur1); 
            $largeur=$taille[0]; 
            $hauteur=$taille[1]; 
            //si mon image est verticale ou carré
            if ($hauteur>=$largeur) 
            { 
            $hauteur2=$affiche; 
            $largeur2=round(($hauteur2/$hauteur)*$largeur); 
            } 
            //si mon image est horizontale ou carré 
            else 
            { 
            $largeur2=$affiche; 
            $hauteur2=round(($largeur2/$largeur)*$hauteur); 
            } 
  if($i%$nbcol==0)
  echo '<tr >';
 // echo '<td><a href="',$valeur1,'" title="image" rel="splash.image" ><img src="',$valeur1,'" width="75%" height="75%" ></a><br/><br/><br/>',$valeur2,'</td>';
   echo '<td bgcolor="#ffffff" align="center" valign="middle" width="100" height="100">
   <a href="',$valeur1,'" title="à la une" rel="splash.image">
   <div class="contour"><img src="',$valeur1,'" width=',$largeur2,' height=',$hauteur2,'></div>
   </a>
 </td>
<td></td>';
  if($i%$nbcol==($nbcol-1))
  echo '</tr>';
  }
  echo '</table>';

Modifié par pareto (19 Mar 2010 - 18:11)
Bonjour

Et avec

SELECT  DISTINCT(id_user), chemin_image FROM users_images;

?

@Heyoan :

Le but n'est pas de récupérer un seul résultat, mais bien un résultat par utilisateur, si j'ai bien compris.
Modifié par Lanza (19 Mar 2010 - 18:39)
hello

avec
$requete="SELECT MIN(id_image) AS id_image, id_user, chemin_image 
FROM users_images GROUP BY id_user Order by RAND()";

ça fait quasiment ce que je veux.
Modifié par pareto (19 Mar 2010 - 18:53)
Lanza a écrit :
@Heyoan :

Le but n'est pas de récupérer un seul résultat, mais bien un résultat par utilisateur, si j'ai bien compris.
Yep ! Autant pour moi : j'avais encore à l'esprit le code que j'ai fait hier. Smiley cligne
Modifié par Heyoan (19 Mar 2010 - 19:02)
Si tu veux garder le côté aléatoire tu peux faire
 SELECT id_user, chemin_image
FROM users_images
GROUP BY id_user
ORDER BY RAND( )