Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment obtenir une ligne aléatoire pour le jour en cours ?

Utilisez une graine pour le générateur de nombres aléatoires en fonction de la date actuelle :

ORDER BY RAND(20120714) LIMIT 1

Je suis également curieux de savoir ce que vous entendez par "autre" ici :

Si vous souhaitez sélectionner un différent citation aléatoire chaque jour, vous ne devriez pas utiliser un simple ORDER BY RAND(seed) . Cela pourrait renvoyer le même devis trois jours de suite.

Si vous voulez éviter que cela ne se produise, vous pouvez à la place stocker le devis sélectionné pour chaque jour et choisir un devis aléatoire parmi ceux qui n'ont pas été utilisés au cours des n derniers jours. Bien sûr, si vous stockez la date de la dernière utilisation d'un devis, il existe également une solution naturelle à votre problème d'origine :

  • Recherchez un devis qui a été utilisé pour la dernière fois aujourd'hui.
  • S'il y en a une, c'est la citation du jour.
  • Si ce n'est pas le cas, sélectionnez une nouvelle citation du jour parmi les lignes qui n'ont pas été utilisées au cours des n derniers jours, et mettez à jour la ligne pour indiquer qu'il s'agit de la citation du jour d'aujourd'hui.

OK, que diriez-vous d'une approche légèrement différente :

ORDER BY RAND(201207) LIMIT 14, 1
--            yyyymm        dd

Maintenant, vous n'avez plus besoin d'une colonne supplémentaire et vous n'obtiendrez pas de répétitions, sauf peut-être lorsque le mois change. Cette solution suppose que vous avez au moins 32 devis parmi lesquels choisir.