J'ai des problèmes avec ma requête pour sélectionner 100 lignes aléatoires d'une base de données avec 50k de lignes.Plusieurs lignes alternatives pour RAND()
D'abord je n'ai utilisé que la fonction RAND() mais c'est devenu trop lent.
Maintenant, je me sers de cette requête:
$query = mysql_query("SELECT t1.* FROM users AS t1 JOIN (SELECT ROUND(RAND() * (SELECT MAX(id) FROM users WHERE picture != '' && age <= 50 && age >= 18 && username != '')) AS id) AS t2 WHERE picture != '' && age <= 50 && age >= 18 && username != '' && t1.id >= t2.id LIMIT 100");
while($q = mysql_fetch_assoc($query))
{ echo $q['id'].'<br>'; }
Mais parfois, il donne un tas de lignes vides. Est-ce que quelqu'un peut me dire ce qui ne va pas?
Merci!
MISE À JOUR J'essaie cette requête aussi, mais cela me donne une erreur.
$query = mysql_query("SELECT id FLOOR(1 + RAND() * x.m_id) 'rand_ind' FROM users (SELECT MAX(t.id) - 1 'm_id' FROM users t) x WHERE picture != '' && age <= 50 && age >= 18 && username != '' ORDER BY rand_ind LIMIT 100");
mysql_fetch_assoc(): argument fourni est pas un résultat MySQL ressource
Obtenir toutes les lignes dans n'importe quel ordre, puis le mélanger en PHP (ou en prendre quelques unes au hasard dans le tableau résultant) pourrait être la bonne approche. –
@MadaraUchiha, en sélectionnant 50k lignes lorsque nous avons besoin de seulement 100 n'est pas une très bonne idée –
@ v2p: N'avez pas bien lu, mon mauvais, vous avez raison. –