PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WEBDEV 2025 → Requete SQL random
Requete SQL random
Débuté par le_noy, 20 jan. 2005 12:21 - 5 réponses
Posté le 20 janvier 2005 - 12:21
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
Posté le 20 janvier 2005 - 12:47
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
Posté le 20 janvier 2005 - 15:11
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) ??
Posté le 20 janvier 2005 - 15:41
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
Membre enregistré
42 messages
Posté le 30 septembre 2018 - 21:41
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.
Posté le 10 mars 2026 - 18:38
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)