Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Вывод в хаотичном порядке
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Вывод в хаотичном порядке

Страниц (1): [1]
 

1. ginec - 13 Января, 2011 - 19:14:48 - перейти к сообщению
Здравствуйте! Мне необходимо вывести записи в хаотичном виде. Т.е. каждый раз порядок разный. Как это можно сделать? Может есть какие-то команды в SQL?
2. Мелкий - 13 Января, 2011 - 19:17:42 - перейти к сообщению
.. order by rand()

при большом количестве записей в таблице будет жрать много ресурсов, там погуглите оптимизацию.
3. ginec - 13 Января, 2011 - 19:44:32 - перейти к сообщению
Мелкий спасибо Здорово ! указали куда копать! Прыгаю до потолка Погуглил. Записей будет не более 300-500. Думаю тут это не так страшно.
4. Champion - 13 Января, 2011 - 20:08:25 - перейти к сообщению
SELECT * FROM tbl WHERE id > rand(0, (select max(id) from tbl)) LIMIT 1
UNION ALL
SELECT * FROM tbl WHERE id > rand(0, (select max(id) from tbl)) LIMIT 1
UNION ALL
SELECT * FROM tbl WHERE id > rand(0, (select max(id) from tbl)) LIMIT 1
UNION ALL
SELECT * FROM tbl WHERE id > rand(0, (select max(id) from tbl)) LIMIT 1
...

А лучше хранимую процедуру, чтоб max(id) несколько раз не выбирать
5. ginec - 17 Января, 2011 - 15:53:38 - перейти к сообщению
У меня на сайте пагинация и поэтому использую LIMIT.
Если сделать так, то на страницах может попадаться запись с предыдущей страницы. Как это исправить? Или хотя бы чтобы 10 записей отображались постоянно на одной и той же странице, но сортировались неупорядоченно? Но желательно конечно, чтобы запись могла быть на любой странице один раз. Надеюсь понятно объяснил
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2.  
  3. SELECT name, id FROM table LIMIT 20,10 ORDER BY rand()
  4.  
6. JustUserR - 17 Января, 2011 - 16:16:47 - перейти к сообщению
ginec пишет:
Если сделать так, то на страницах может попадаться запись с предыдущей страницы. Как это исправить? Или хотя бы чтобы 10 записей отображались постоянно на одной и той же странице, но сортировались неупорядоченно
Для осуществления решения предполагаемой вами задачи по реализации создания выборки основанной на случайной величины с отсутсвием повторяющихся записей - необходимо использования промежуточной VIEW-таблицы для осуществления хранения списка информационных полей полученного в результат проведенной случайной сортировки
7. DeepVarvar - 17 Января, 2011 - 16:45:26 - перейти к сообщению
Получить записи в массив и перед циклом вывода этих записей сделать:
array_shuffle($resultarray);
8. ginec - 17 Января, 2011 - 17:06:10 - перейти к сообщению
JustUserR спасибо. а как с нагрузкой дела обстоят?еще погуглю на эту тему

DeepVarvar, спасибо, тоже думал про это. Но в таком случае выходит, что на одной странице будут те же записи, только в разном порядке.

А вообще форум отличный! оперативно, информативно, здорово! Здорово
9. ginec - 21 Января, 2011 - 23:06:05 - перейти к сообщению
Скажите, как сделать рандомное отображение, при пагинации, чтобы не было повторения записей. Временная таблица не подходит((
10. EuGen - 24 Января, 2011 - 11:30:58 - перейти к сообщению
Придется результат выборки сохранять, так как повторный запрос вернет все снова в перемешанном виде. Можно в виде ассоциативного массива ("номер страницы" будет ключем, а массив с данными для этой страницы - значением)
11. movEAX - 24 Января, 2011 - 14:55:51 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. $mysqli = new mysqli( ... );
  2. $res = $mysqli->query('SELECT COUNT(id) FROM ur_table'); // кэшировать
  3. $maxOffset= array_shift($res->fetch_row());
  4. $mysqli->query('SELECT * FROM ur_table ORDER BY id LIMIT ' . rand(0, $maxOffset-1) . ', 1');
12. ginec - 25 Января, 2011 - 12:04:40 - перейти к сообщению
movEAX разве записи не будут повторяться??? Пока сделал с помощью сессии. Работает, но вариант с ней не ахти...
13. JustUserR - 25 Января, 2011 - 16:53:42 - перейти к сообщению
ginec пишет:
JustUserR спасибо. а как с нагрузкой дела обстоят?еще погуглю на эту тему
Использование предполагаемого варианта решения не осуществляет существенное увеличение нагрузки на сервер БД по причине использование внутренних native-операций реализация которых является максимально оптимизированной - в частности проявляюшихся накладных расходов является пространство локального диска для осуществления хранения копии таблицы БД с заданным порядком информационных полей

 

Powered by ExBB FM 1.0 RC1