2010-06-11 8 views
0

Y at-il une fonction intégrée, sauf ordre par random() pour sélectionner un enregistrement aléatoire dans la table mysql?enregistrement aléatoire de la table mysql

+0

Avez-vous un problème avec vos conseils et votre commande par hasard()? –

+1

Voir des questions similaires: http://stackoverflow.com/questions/1244555/how-can-i-optimize-mysqls-order-by-rand-function http://stackoverflow.com/questions/1823306/alerternative-to- mysql-order-by-rand http://stackoverflow.com/questions/1868102/order-by-rand-alternative http://stackoverflow.com/questions/2882647/mysql-order-by-rand-name-asc http : //stackoverflow.com/questions/2663710/how-does-mysqls-order-by-rand-work – nickf

Répondre

1

Je ne pense pas ... pourquoi ne pas vouloir utiliser celui qui fonctionne?

BTW, je suis assez sûr que c'est ORDER BY RAND(). Je l'ai lu peut être un problème de performance sur de nombreuses lignes ... avez-vous beaucoup de lignes?

+0

non, j'ai environ 1000 conseils mais j'ai environ 10000 utilisateurs, il va ralentir le processus et aussi les conseils sont basé sur la catégorie. – shivg

2

Non, mais vous pouvez le faire en deux questions. Dans pseudo-PHP-MySQL et code:

$max = SELECT COUNT(*) FROM example; 
$rand = rand(0, $max-1); 
SELECT * FROM example LIMIT $rand, 1; 

La bonne façon serait probablement de le faire dans une procédure stockée.

+0

Merci pour votre réponse immédiate. En fait, je ne veux pas exécuter deux requêtes de sélection car je l'utilise pour afficher des conseils pour l'utilisateur au hasard. Y a-t-il une autre idée? – shivg

+0

@rshivaganesh - cette méthode a * beaucoup * de meilleures performances que 'order by rand() ' – nickf

+0

Pas que je sache. J'irais avec ORDER BY RAND() sur une petite table. Peut-être que vous pouvez mettre en cache le résultat de la première requête d'une manière ou d'une autre? –

1
SELECT * FROM users ORDER BY RAND() Limit 0, 1; 
+0

qui devrait être' LIMIT 0, 1' ou 'LIMIT 1' – nickf

+1

@nickf est-ce vraiment important? ;-) –

+0

@nickf: - Je l'édite mais je pense 'Limit 1, 1'; aussi pas mal car il veut des données aléatoires à afficher. – Salil

Questions connexes