2009-12-17 4 views
0

comment former une requête pour sélectionner 'm' lignes aléatoirement à partir d'un résultat de requête qui a 'n' lignes.mysql lignes aléatoires

pour ex; 5 lignes d'un résultat de requête qui a 50 lignes

j'essaye comme comme suit, mais il des erreurs

select * from (select * from emp where alphabet='A' order by sal desc) order by rand() limit 5; 

u peut se demander que la raison pour laquelle il a besoin sous requête, j'ai besoin 5 noms différents d'un ensemble de haut 50 résultat par requête interne.

Répondre

1
SELECT * FROM t 
ORDER BY RAND() LIMIT 5 

ou de résultats de votre requête:

SELECT * FROM (SELECT * FROM t WHERE x=y) tt 
ORDER BY RAND() LIMIT 5 
+0

2ème erreur de résultat de la requête comme suit: erreur 1248 (42000): Chaque table dérivée doit avoir son propre alias – ArK

+1

juste ajouter « some_name » (sans les guillemets) après la clôture Parenthese –

+0

note que 'commande par rand()' devient cher lorsque le nombre de lignes devient grand –

1

Cela vous donnera le numéro à utiliser comme 'm' (limite)

TRUNCATE((RAND()*50),0); 

... remplaçant 50 avec n.
Pour le vérifier les opérations suivantes:

SELECT TRUNCATE((RAND()*50),0); 

Je préviens que cela pourrait revenir 0 à la suite, est-ce ok pour vous?

Par exemple, vous pouvez faire quelque chose comme ceci:

SELECT COUNT(*) FROM YOUR_TABLE 

... et stocker le résultat dans une variable nommée totalRows par exemple. Ensuite, vous pouvez faire:

SELECT * FROM YOUR_TABLE LIMIT TRUNCATE((RAND()*?),0); 

où vous remplacez le '?' avec la variable totalRows, en fonction de la pile technologique que vous utilisez.
Est-il plus clair maintenant? Si non, veuillez ajouter plus d'informations à votre question.

+0

désolé je ne pouvais pas comprendre votre solution. pouvez-vous m'en dire plus s'il vous plaît – ArK

+0

édité, voir si c'est plus clair –

Questions connexes