MySQL « Выборка данных из БД в случайном порядке

База данных MySQL.

Есть блог или форум с темами и тэгами. Хочется рядом с топиком показывать список похожих тем (по совпадению тэгов) но отсортированный случайным образом. Скажем есть десять схожих тем, у которых совпадает два тэга. Я показываю только пять похожих тем и хочу чтобы это были разные темы при каждой перезагрузке страницы.

Пример.
Первый вызов.

/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .ini.geshi_code {font-family:monospace;} .ini.geshi_code .imp {font-weight: bold; color: red;} .ini.geshi_code .co0 {color: #666666; font-style: italic;} .ini.geshi_code .sy0 {color: #000066; font-weight:bold;} .ini.geshi_code .st0 {color: #933;} .ini.geshi_code .re0 {color: #000066; font-weight:bold;} .ini.geshi_code .re1 {color: #000099;} .ini.geshi_code .re2 {color: #660066;} .ini.geshi_code span.xtra { display:block; }

Совпадает_тэгов Имя_темы
----------------------------------
3                 Тема1
3                 Тема13
2                 Тема2
2                 Тема3
2                 Тема7
 


Второй вызов.

/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .ini.geshi_code {font-family:monospace;} .ini.geshi_code .imp {font-weight: bold; color: red;} .ini.geshi_code .co0 {color: #666666; font-style: italic;} .ini.geshi_code .sy0 {color: #000066; font-weight:bold;} .ini.geshi_code .st0 {color: #933;} .ini.geshi_code .re0 {color: #000066; font-weight:bold;} .ini.geshi_code .re1 {color: #000099;} .ini.geshi_code .re2 {color: #660066;} .ini.geshi_code span.xtra { display:block; }

Совпадает_тэгов Имя_темы
----------------------------------
3                 Тема13
3                 Тема1
2                 Тема8
2                 Тема5
2                 Тема2

 

1 ответов


А так не работает?


SELECT * FROM tbl_name ORDER BY RAND();
/*ORDER BY RAND() combined with LIMIT is useful for selecting a random sample from a set of rows:*/
 

MySQL doc

Приведенный выше пример будет всегда работать не так шустро! Но есть решение!)))

Почему и каково решение уже достаточно давно писали здесь - http://habrahabr.ru/blogs/mysql/54176/