La communauté ALL HTML c'est 58827 membres à ce jour dont 3 inscrits aujourd'hui et 32 depuis une semaine.

  • imprimer
  • aide

Forum de discussions « PHP - SQL »

Retrouvez les publications relatives à ces discussions dans nos rubriques PHP, SQL.

Order by rand() et doublons

liste des forums liste des discussions Participer à la discussion

Photo de junglist Message publié le jeudi 21 août 2008 à 02 h 01 par junglist. www.p1nk-00.com
Bonsoir,

Quelqu'un sait-il comment éviter les doublons pour les requêtes aléatoires ? Par exemple dans le cas où on souhaite mettre en place soi-même 1 régie publicitaire ou une galerie photo aléatoire ...

J'ai essayé order by rand(" . time() . " * " . time() . ") mais le problème subsiste. Quand à order by newid(), il ne me sélectionne qu'une seule entrée malgré la fonction Select.

D'avance merci.
Photo de junglist Message publié le jeudi 21 août 2008 à 02 h 03 par junglist. www.p1nk-00.com
erratum : malgré la fonction Select -> malgré la fonction Limit
Photo de junglist Message publié le jeudi 21 août 2008 à 02 h 39 par junglist. www.p1nk-00.com
J'ai précise que j'ai également essayé avec Distinct mais rien à faire : je continue d'avoir des doublons.
Photo de TheoDaOuf Message publié le jeudi 21 août 2008 à 11 h 02 par TheoDaOuf.
Avec distinct ça devrait marcher, tu ne l'applique peut être pas sur le bon champ. Faudrait voir comment se présente ta table, mais pourquoi pas avec un group by ?
Photo de junglist Message publié le jeudi 21 août 2008 à 11 h 49 par junglist. www.p1nk-00.com
- si je fais ' SELECT DISTINCT id FROM xxx ORDER BY rand() LIMIT 5 ' je continue d'avoir des doublons. (ex : 7 - 9 - 9 - 11 - 3)
- si je fais ' SELECT DISTINCT FROM xxx ORDER BY rand() LIMIT 5 ' je n'ai plus qu'une entrée de sélectionnée malgré le LIMIT 5. (ex : 4)
- si je fais ' SELECT id FROM xxx ORDER BY rand() LIMIT 5 GROUP BY id ' pareil, je n'ai plus qu'une seule entrée (ex : 2)
Photo de TheoDaOuf Message publié le jeudi 21 août 2008 à 14 h 06 par TheoDaOuf.
Mais déjà si t'as plusieurs ID identique, tu as un soucis dans ta table :P
Il y a une erreur ailleurs, la méthode distinct est bonne (après test, group by ne va pas avec le order rand on dirait, ou au pire il irait avec des requètes imbriquées style :

SELECT distinct id FROM (SELECT id FROM table group by id)Test ORDER BY rand()

mais dans ton cas c'est se compliquer la vie pour rien ^^ )
Photo de junglist Message publié le jeudi 21 août 2008 à 17 h 00 par junglist. www.p1nk-00.com
Non non, je n'utilise pas plusieurs fois la même id.

Je t'explique : chaque article est numéroté par id (1, 2, 3, 4, 5, 6 etc.). Dans un fichier se trouvent des photos correspondant chacune à 1 article (1.jpg, 2.jpg, 3.jpg, 4.jpg, 5.jpg, 6.jpg etc.).

Je veux simplement prendre 5 photos au hazard et faire 1 lien vers l'article correspondant en récupérant 5 id différentes dans la table contenant les articles, ce qui donne

<a href=".../article.php?numero=ID1"> <img src=".../ID1.jpg"> </a>
<a href=".../article.php?numero=ID1"> <img src=".../ID2.jpg"> </a>
<a href=".../article.php?numero=ID3"> <img src=".../ID3.jpg"> </a>
<a href=".../article.php?numero=ID4"> <img src=".../ID4.jpg"> </a>
<a href=".../article.php?numero=ID5"> <img src=".../ID5.jpg"> </a>

Par exemple :

<a href=".../article.php?numero=3"> <img src=".../3.jpg"> </a>
<a href=".../article.php?numero=12"> <img src=".../12.jpg"> </a>
<a href=".../article.php?numero=17"> <img src=".../17.jpg"> </a>
<a href=".../article.php?numero=38"> <img src=".../38.jpg"> </a>
<a href=".../article.php?numero=9"> <img src=".../9.jpg"> </a>

Sauf que j'obtiens régulièrement des doublons. Par exemple :

<a href=".../article.php?numero=3"> <img src=".../3.jpg"> </a>
<a href=".../article.php?numero=12"> <img src=".../12.jpg"> </a>
<a href=".../article.php?numero=17"> <img src=".../17.jpg"> </a>
<a href=".../article.php?numero=3"> <img src=".../3.jpg"> </a>
<a href=".../article.php?numero=9"> <img src=".../9.jpg"> </a>

Pour le cas ce n'est effectivement pas forcément primordial d'arriver à dédoublonner à tout prix, mais dans le cas d'1 régie pub autogérée, ça m'éviterait d'avoir 2 fois la même annonce textuelle sur la même bannière ce qui serait un peu balo ...

J'ai essayé ce que tu m'as dit :

"SELECT distinct id FROM (SELECT id FROM xxx GROUP BY id LIMIT 5)Test ORDER BY rand() "

et aussi

"SELECT distinct id FROM (SELECT id FROM xxx GROUP BY id)Test ORDER BY rand() LIMIT 5"

mais pourtant il m'arrive toujours d'avoir des doublons ....
Photo de nours312 Message publié le jeudi 21 août 2008 à 19 h 14 par nours312. hé oui
peux tu essayer :

$query = mysql_query("SELECT id FROM xxx ORDER BY rand() ");

print_r(array_rand(array_unique(mysql_fetch_assoc($query)), 5));

ou :

$query = mysql_query("SELECT id FROM xxx ORDER BY rand(id, 5) ");
print_r(mysql_fetch_assoc($query));

ou peut-etre :

$query = mysql_query("SELECT id FROM xxx ORDER BY rand(" . time() . " * " . time() . ") LIMIT 5 ");
print_r(mysql_fetch_assoc($query));



Je ne l'ai pas testé, mais, o cas ou ! la premiere solution, je ne vois pas pourquoi ça n'irai pas ! dans la seconde, c'est en donnant tout de mm un peut de matière à rand(), la troisième fut trouver sur un autre forum !

BonCode;)
Photo de nours312 Message publié le jeudi 21 août 2008 à 20 h 32 par nours312. hé oui
dans la doc, ils disent :

"Vous ne pouvez pas utiliser une colonne de valeur RAND() dans une clause ORDER BY, parce que ORDER BY va évaluer la colonne plusieurs fois."
http://dev.mysql.com/doc/refman/5.0/fr/mathematical-functions.html

ce qui expliques tes doublons !!
tu peux donc éliminer les deux dernieres propositions que je t'ai fais plus haut ;)

voila ... j'en sais pas plus !
Photo de junglist Message publié le jeudi 21 août 2008 à 21 h 07 par junglist. www.p1nk-00.com
Ppppppffffffffffffffffffff ... Mais quel noob je suis !

Merci sincèrement à tous les 2, mais je viens de me rappeler que j'allais chercher 5 vignettes pour les mettre à la suite, puis que je retournais en chercher 1 sixième pour la mettre dans un cadre légèrement différent au niveau des border en CSS.

Il est donc normal que la 6ème vignette forme régulièrement des doublons avec l'1 des 5 premières.

Ok je ------> SORS !!

liste des forums liste des discussions Participer à la discussion

Vous devez obligatoirement vous identifier en tant que membre pour participer à cette discussion.

ACCÉS COMMUNAUTÉ

Rejoignez ALL HTML

Publiez vos articles, actualités, communiqués ... Donnez votre avis, partagez votre réseau, rencontrez d'autres membres et participez à la vie de la communauté.

Les 5 dernières discussions