PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WEBDEV 2025 → Requete SQL random
Requete SQL random
Started by le_noy, Jan., 20 2005 12:21 PM - 5 replies
Posted on January, 20 2005 - 12:21 PM
Bonjour à tous les développeurs WebDev,
comment faire pour selectionner 3 enregistrements d'une table aléatoirement? J'ai vu une fonction SQL "ORDER BY RAND() LIMIT 3" mais impossible de la faire fonctionner correctement et de plus on m'a plutot conseillé de sélectionner tous mes enregistrements puis ensuite à l'aide des fonctions de WebDev de n'en sélectionner que 3, aléatoirement. Mon souçis est que je ne vois pas trop comment procéder... Merci d'avance si on peut me guider.
Cordialement,
Jim
Posted on January, 20 2005 - 12:47 PM
Le 20/01/2005, Jim R a supposé :
Bonjour à tous les développeurs WebDev,
comment faire pour selectionner 3 enregistrements d'une table aléatoirement?
J'ai vu une fonction SQL "ORDER BY RAND() LIMIT 3" mais impossible de la
faire fonctionner correctement et de plus on m'a plutot conseillé de
sélectionner tous mes enregistrements puis ensuite à l'aide des fonctions de
WebDev de n'en sélectionner que 3, aléatoirement. Mon souçis est que je ne
vois pas trop comment procéder... Merci d'avance si on peut me guider.
Cordialement, Jim


tout dépend de ta base.

si c'est du mysql, cela ressemblerait à ça
SELECT PPL_ID FROM PEOPLE
ORDER BY RAND() LIMIT 3

si c'est de l'Oracle (par ex 3O client du 75)
select * from (
select idf_client from client
where substr(code_postal,1,2)='75'
order by MOD(DBMS_RANDOM.RANDOM,50)+50)
where rownum<0;

si c'est du HF ????
essaie la vs mysql

--
Eric
Webmaster des Wtablettes
www.wtablettes.net
Posted on January, 20 2005 - 3:11 PM
J'ai déja essayé ceci :
Requete1 = "SELECT FAMILLE.NOMFAMILLE AS NOMFAMILLE,"+...
" SOUSFAMILLE.NOMSOUSFAMILLE AS NOMSOUSFAMILLE,"+...
" PRODUIT.NOMPRODUIT AS NOMPRODUIT,"+...
" PRODUIT.DESCPRODUIT AS DESCPRODUIT,"+...
" PRODUIT.PRIXVENTEPRODUIT AS PRIXVENTEPRODUIT,"+...
" PRODUIT.PRIXPROMOPRODUIT AS PRIXPROMOPRODUIT,"+...
" PRODUIT.PROMOPRODUIT AS PROMOPRODUIT"+...
" FROM SOUSFAMILLE, FAMILLE_SOUSFAMILLE, FAMILLE, PRODUIT"+...
" WHERE SOUSFAMILLE.IDSOUSFAMILLE = FAMILLE_SOUSFAMILLE.IDSOUSFAMILLE"+...
" AND FAMILLE.IDFAMILLE = FAMILLE_SOUSFAMILLE.IDFAMILLE"+...
" AND FAMILLE_SOUSFAMILLE.ID = PRODUIT.ID"+...
" AND PRODUIT.PROMOPRODUIT = 'Vrai'"+...
" ORDER BY RAND() LIMIT 3"

et ça ne veut pas :( ne faut-il pas mettre un paramêtre à RAND(param) ??
Posted on January, 20 2005 - 3:41 PM
Jim R a formulé la demande :
J'ai déja essayé ceci :
Requete1 = "SELECT FAMILLE.NOMFAMILLE AS NOMFAMILLE,"+...
" SOUSFAMILLE.NOMSOUSFAMILLE AS NOMSOUSFAMILLE,"+...
" PRODUIT.NOMPRODUIT AS NOMPRODUIT,"+...
" PRODUIT.DESCPRODUIT AS DESCPRODUIT,"+...
" PRODUIT.PRIXVENTEPRODUIT AS PRIXVENTEPRODUIT,"+...
" PRODUIT.PRIXPROMOPRODUIT AS PRIXPROMOPRODUIT,"+...
" PRODUIT.PROMOPRODUIT AS PROMOPRODUIT"+...
" FROM SOUSFAMILLE, FAMILLE_SOUSFAMILLE, FAMILLE, PRODUIT"+...
" WHERE SOUSFAMILLE.IDSOUSFAMILLE = FAMILLE_SOUSFAMILLE.IDSOUSFAMILLE"+...
" AND FAMILLE.IDFAMILLE = FAMILLE_SOUSFAMILLE.IDFAMILLE"+...
" AND FAMILLE_SOUSFAMILLE.ID = PRODUIT.ID"+...
" AND PRODUIT.PROMOPRODUIT = 'Vrai'"+...
" ORDER BY RAND() LIMIT 3"

et ça ne veut pas :( ne faut-il pas mettre un paramêtre à RAND(param) ??


non pas de param.
j'espère que t'as commencé par faire simple ?
Requete1 = "SELECT FAMILLE.NOMFAMILLE FROM FAMILLE LIMIT 3"

pour valider l'utilisation du LIMIT avec HF

Requete1 = "SELECT FAMILLE.NOMFAMILLE FROM FAMILLE ORDER BY RAND()
LIMIT 3"

puis pour valider l'utilisation du RAND avec HF

sinon peut être la fn Hasard de windev fonctionnerait ?

--
Eric
Webmaster des Wtablettes
www.wtablettes.net
Registered member
42 messages
Posted on September, 30 2018 - 9:41 PM
Hello à tous,
je déterre le sujet parce que je rencontre le même problème en 2018.
Que ce soit avec la fonction WL.Hasard() ou rand() elles retournent toujours le même résultat à l'exécution dans une requête SQL.
Ce qui fait qu'il est difficile de prendre un enregistrement au hasard.

Même en construisant la requête de différentes manières comme ceci :

[...]
ORDER BY rand() LIMIT 1


ou ceci :

[...]
WL.Hasard() AS hasardd
[...]
ORDER BY hasardd LIMIT 1


J'ai toujours le même résultat en sortie..

Est-ce que quelqu'un a trouvé une solution (performante) ?

PS : Petite précision, ma base de données étend répliquée les identifiants ne sont pas consécutifs. Je ne peux donc pas tenter de sélectionner un enregistrement en utilisant un identifiant au hasard entre le plus petit et le plus grand des IDs disponibles.
Posted on March, 10 2026 - 6:38 PM
2026.....et toujours pas possible de faire un simple RAND() dans une requête

Bref, en jouant sur les centièmes de seconde, j'ai pu obtenir un résultat à peu près aléatoire

ORDER BY WL.HASARD(WL.VAL(WL.DROITE(WL.HEURESYS(), 1 )+WL.DROITE(WL.HEURESYS(),2))/WL.VAL(WL.DROITE(WL.HEURESYS(),2))*(1+WL.VAL(WL.DROITE(WL.HEURESYS(), 1 )))*10000,(1+WL.VAL(WL.DROITE(WL.HEURESYS(), 1 )))*10000000)