SQL : order by rand() mais en privilégiant des annonces ?

Bon voilà, j’ai une requête SQL dont le rôle est de m’afficher par jour une annonce au hasard.
j’utilise pour cela la fonction classique rand()

Comment faire pour favoriser certaines annonces plus méritantes dans cet hasard ?
Pour qu’elles aient 2 à 3 fois plus de chance d’être gagnantes.

Salut,

j’ai un doute sur le fait qu’on puisse effectuer des opérations mathématiques dans le ORDER, si tel est le cas, tu peux imaginer un champ coefficient dans ta table que tu multiplies à RAND(), plus le coeff est haut, plus tu auras de chance d’avoir cette annonce ! :slightly_smiling:

Si tu as un nombre limité et fixe de notes par exemple les entiers de 0 à 10 tu peut faire :

SELECT * FROM ( select * from annonce union select * from annonce where note > 1 union select * from annonce where note > 2 union select * from annonce where note > 3 union select * from annonce where note > 4 union select * from annonce where note > 5 union select * from annonce where note > 6 union select * from annonce where note > 7 union select * from annonce where note > 8 union select * from annonce where note > 9 ) ORDER BY RAND() LIMIT 1;

Fastudieux n’est ce pas ? En plus ce n’est pas très souple, mais je connais que très mal l’utilisation du random dans les requêtes. J’ai une autre solution nettement plus souple, mais il faudrait que tu ai accès à des fonctions analytiques donc à PostgreSQL (c’est aussi possible sous MySQL mais sous forme d’extension).

Oui, c’est assez lourd comme requête, je suis effectivement sous mysql.

Mais merci à vous quand même pour les pistes :wink:

La lourdeur n’est que syntaxique, au niveau des performances, même si ce n’est pas optimal, le système de cache diminue l’impacte sur la performance.

Tout à fait. Le cache, bien évidemment. Oublions ma réflexion :wink: