2010-04-15 4 views
3

J'utilise la recherche de texte intégral pour tirer des lignes.
Je commande les lignes en fonction du score (ORDER BY SCORE), puis des 20 premières lignes (LIMIT 20), je veux rand (RAND) l'ensemble de résultats.LIMIT puis RAND plutôt que RAND puis LIMIT

Donc, pour tout terme de recherche spécifique, je veux montrer au hasard 5 des 20 premiers résultats.

Ma solution est base- de code où je mets le top 20 dans un tableau, puis sélectionnez au hasard 5.

Y at-il moyen sql de le faire?

Répondre

6

Vous pouvez le faire en utilisant un select interne. Sélectionnez les vingt premières lignes dans la sélection interne. Dans l'ordre de sélection externe, sélectionnez ces rangées de manière aléatoire et sélectionnez les cinq premiers:

SELECT * 
FROM (
    SELECT * 
    FROM table1 
    ORDER BY score DESC 
    LIMIT 20 
) AS T1 
ORDER BY RAND() 
LIMIT 5 
+0

RAND évalue-t-il différemment pour chaque ligne de MySQL? (Je demande parce que dans SQL Server vous auriez à utiliser NEWID) – gbn

+1

+1 L'autre solution de contournement est une double requête imbriquée (@gbn: oui c'est le cas) – Andomar

+1

@gbn: 'ORDER BY RAND() combiné avec LIMIT est utile pour sélectionner un échantillon aléatoire à partir d'un ensemble de lignes »à partir de http://dev.mysql.com/doc/refman/5.0/fr/fonctions-mathématiques.html#fonction_rand –