Suivez les fils RSS
 
Auteur
pareto
# 19 Mar 2010 - 17:31:01
Citer
163 Posts
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)

^
Heyoan
# 19 Mar 2010 - 17:37:49
Citer
Modérateur
8101 Posts
Salut,

ben déjà je t'avais donné une solution dans ce post. 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.

^
pareto
# 19 Mar 2010 - 17:48:50
Citer
163 Posts
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)

^
Lanza
# 19 Mar 2010 - 18:37:14
Citer
Ah ! Je fais le zouave !
937 Posts
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)

<!-- sans commentaires... -->

^
pareto
# 19 Mar 2010 - 18:52:52
Citer
163 Posts
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)

^
Heyoan
# 19 Mar 2010 - 18:57:42
Citer
Modérateur
8101 Posts
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. cligne
Modifié par Heyoan (19 Mar 2010 - 19:02)

^
Heyoan
# 19 Mar 2010 - 19:08:22
Citer
Modérateur
8101 Posts
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( )


^
pareto
# 19 Mar 2010 - 19:17:52
Citer
163 Posts
Heyoan je t'ai envoyé un MP.
Modifié par pareto (19 Mar 2010 - 21:02)

^
Heyoan
# 19 Mar 2010 - 21:13:27
Citer
Modérateur
8101 Posts
J'ai mis à jour le code de ce post. cligne

^
pareto
# 20 Mar 2010 - 09:00:30
Citer
163 Posts
Merci Heyoan, je teste, qu'est-ce-que-je ferais sans toi ... cligne

^
pareto
# 22 Mar 2010 - 09:34:25
Citer
163 Posts
Voilà, j'ai testé et ça marche impeccable (com d'hab) grace a HEYOAN !
Merci encore. lol

^