За последние 24 часа нас посетили 17962 программиста и 1700 роботов. Сейчас ищут 1704 программиста ...

Энтузиастам - двиг на PHP-MySQL

Тема в разделе "PHP Free-Lance", создана пользователем dark991, 11 июл 2006.

  1. Vah

    Vah Активный пользователь

    С нами с:
    15 май 2006
    Сообщения:
    228
    Симпатии:
    0
    simpson
    эммм...... Ну так эксперт говорит....... Значит так надо!! по другому никак! =)))))
     
  2. Ti

    Ti Активный пользователь

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
    Vah
    чесна гря делал один раз такой рандом
    но дб была SQLite, а там есть транзакции, а главное не дырявый ROWID ;)
     
  3. Vah

    Vah Активный пользователь

    С нами с:
    15 май 2006
    Сообщения:
    228
    Симпатии:
    0
    ну транзакции тут непричем..... они стоят в сторонке и нервно курят.....
    Не дырявый ROWID это уже значительно упрощает задачу...... Тут даже думать долго не надо...... с хода писать можно..... =)

    А вообще какой SQL (MySQL или SQLite или MaxDB и т.д.) - для алгоритма значения не имеет......
     
  4. Ti

    Ti Активный пользователь

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
    вай ЛС
     
  5. Ti

    Ti Активный пользователь

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
    Vah
    читерское решение. Оно мне на ум приходило, я его подалше - я не читер :)
     
  6. Vah

    Vah Активный пользователь

    С нами с:
    15 май 2006
    Сообщения:
    228
    Симпатии:
    0
    Ti
    Дык когда список читов к игре php+sql есть - грех не воспользоваться... =)
     
  7. Ti

    Ti Активный пользователь

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
    есть вариант - курсор mysql радномно передвигать
     
  8. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Кстати в принципе можно сделать и так...

    Сначала
    Код (Text):
    1. SELECT * FROM tbl_name ORDER BY RAND();
    А потом уже на РНР отсортировать то что получилось так
     
  9. Vah

    Vah Активный пользователь

    С нами с:
    15 май 2006
    Сообщения:
    228
    Симпатии:
    0
    кусок кода встудию.....
     
  10. Ti

    Ti Активный пользователь

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
    Vladson
    у меня с 188506 записями такой запрос идет непозволительно долго ~1.2с
     
  11. Vah

    Vah Активный пользователь

    С нами с:
    15 май 2006
    Сообщения:
    228
    Симпатии:
    0
    это ты первой задачке??
    тогда нет..... там все делается 1-м запросом..... и можно сделать с упорядочевая по 1 значению....

    если ко 2-й....
    запрос с более миллиона записей при посещяемости хотя бы 3 хита в секунду - загнет сервер.... =)
     
  12. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Ti
    Для этого есть LIMIT (а когда требуется вывести ВСЕ ряды то любой другой код тоже будет дай-боже)
     
  13. Vah

    Vah Активный пользователь

    С нами с:
    15 май 2006
    Сообщения:
    228
    Симпатии:
    0
    см. апдейт моего сообщения выше...
     
  14. Vah

    Vah Активный пользователь

    С нами с:
    15 май 2006
    Сообщения:
    228
    Симпатии:
    0
    ЛИМИТ - конечно хорошо....
    Только сначала выберется вся эта балясина, потом отсортируется по рандомному параметру и потом он отрежет $limit записей.... ;)
     
  15. Ti

    Ti Активный пользователь

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
    Vladson
    с лимитом или без - нагрузка не в этом
    сервак в любом случае для каждой записи будет рандом генить, а потом сравнивать - это время и занимает
     
  16. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    Так все уточнения раскиданы что сложно отследить хронологию вопроса и отличить одно от другого
     
  17. Ti

    Ti Активный пользователь

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
    да, погоречился я - выборка всего долго тоже идет
     
  18. Vah

    Vah Активный пользователь

    С нами с:
    15 май 2006
    Сообщения:
    228
    Симпатии:
    0
    Короче ORDER BY RAND() не подойдет..... это равносильно
    $res=mysql_query("SELECT * FROM hints");
    $count=mysql_num_rows($res);
    вместо SELECT COUNT(*) ...
    при ордере рандомном сначала он все записи выберет назначив им рандомно позицию для сортировки рандомной, потом отсортирует и только потом отбросит все что выходит за предел LIMIT'а

    Ti
    ага... не быстро =)
     
  19. Vah

    Vah Активный пользователь

    С нами с:
    15 май 2006
    Сообщения:
    228
    Симпатии:
    0
    через час-полтора отпишу ответ к сий задачке..... времени подумать думаю было достаточно..... Если у кого ещё какие мысли - пишите пока не выложил ответ.... =)
     
  20. Ti

    Ti Активный пользователь

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
    есть еще вариант через LIMIT играть
     
  21. Vah

    Vah Активный пользователь

    С нами с:
    15 май 2006
    Сообщения:
    228
    Симпатии:
    0
    Ti
    через LIMIT поиграть неполучится.....
    надо выбрать из всей таблицы а не из определенного региона.... размером в 100 записей.....
    Хотя не получится - конечно громко сказанно..... но вот время выполнения такого запроса..... ;)

    Алгоритм такой
    1) select K * (count(id) / (max(id) - min(id))) as num_of_rand
    2) подобираем коэффициент k чтобы всегда хватало экспериментально в районе 1.5 - 2.5
    3) генерим num_of_rand * $limit случайных чисел в диапазоне min - max
    4) делаем выборку where id in (снегеренные числа) limit $limit
     
  22. Ti

    Ti Активный пользователь

    С нами с:
    3 июл 2006
    Сообщения:
    2.378
    Симпатии:
    1
    Адрес:
    d1.ru, Екатеринбург
    я в курсе ;) 10 запросов будет не накладно
     
  23. Vah

    Vah Активный пользователь

    С нами с:
    15 май 2006
    Сообщения:
    228
    Симпатии:
    0
    не быстрее 2-х запросов..... ;)
     
  24. SeregA

    SeregA Активный пользователь

    С нами с:
    2 фев 2006
    Сообщения:
    269
    Симпатии:
    0
    Адрес:
    Saint Petersburg, Russia