MySQL: альтернативы РЭНДУ ORDER BY ()

Hmmm, никто не сказал F1 для справки.

Мог он быть, что Google быстрее и лучше для достигания информации, в которой Вы нуждаетесь.

58
задан OMG Ponies 14 February 2011 в 15:28
поделиться

1 ответ

Вот альтернатива, но она все еще основана на использовании RAND ():

  SELECT u.id, 
         p.photo,
         ROUND(RAND() * x.m_id) 'rand_ind'
    FROM users u, 
         profiles p,
         (SELECT MAX(t.id) 'm_id'
            FROM USERS t) x
   WHERE p.memberid = u.id 
     AND p.photo != '' 
     AND (u.ownership=1 OR u.stamp=1) 
ORDER BY rand_ind
   LIMIT 18

Это немного сложнее, но дает лучшее распределение значений random_ind:

  SELECT u.id, 
         p.photo,
         FLOOR(1 + RAND() * x.m_id) 'rand_ind'
    FROM users u, 
         profiles p,
         (SELECT MAX(t.id) - 1 'm_id'
            FROM USERS t) x
   WHERE p.memberid = u.id 
     AND p.photo != '' 
     AND (u.ownership=1 OR u.stamp=1) 
ORDER BY rand_ind
   LIMIT 18
20
ответ дан 24 November 2019 в 19:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: