2010-10-23 19 views

Répondre

3

Pour une petite table aime le vôtre, il devrait suffire avec ceci:

SELECT * FROM table ORDER BY RAND() LIMIT 40; 

Notez que cela ne convient pas pour les grandes tables depuis MySQL devra faire un scan de table et pour toutes les lignes de la table en raison de l'utilisation de ORDER BY RAND(). Pour les grandes tables, vous devrez implémenter cela principalement dans le code de l'application, en gardant une trace des lignes que vous avez déjà et en générant des identifiants aléatoires à récupérer.

2

Vous devez utiliser rand() avec order by comme ceci:

SELECT field1, field2 
FROM tableName 
ORDER BY RAND() 
LIMIT 40 
0

Notez que ce n'est pas une solution rapide, mais il fonctionne très bien pour seulement 300 dossiers

SELECT [rows] 
FROM [table] 
ORDER BY RAND() 
LIMIT 40 
-2

SELECT * FROM table ORDER BY RAND() LIMIT 40

1

order by rand() peut provoquer des problèmes de performance, essayez plutôt de le faire de la façon suivante:

// what NOT to do: 
$r = mysql_query("SELECT username FROM user ORDER BY RAND() LIMIT 1"); 

// much better: 

$r = mysql_query("SELECT count(*) FROM user"); 
$d = mysql_fetch_row($r); 
$rand = mt_rand(0,$d[0] - 1); 

    $r = mysql_query("SELECT username FROM user LIMIT $rand, 1");  
0

vous devriez utilisateur RAND() dans la clause WHERE

mais vous faites d'abord fragment 40/nombre de lignes dans le tableau

ex:

SELECT * FROM [TABLE_NAME] WHERE RAND()< 0.0005; 
Questions connexes