За последние 24 часа нас посетили 19364 программиста и 1606 роботов. Сейчас ищут 822 программиста ...

order by rand() чем заменить?

Тема в разделе "MySQL", создана пользователем joost, 29 июл 2009.

  1. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    "общее решение" означает независимость от входных данных. У тебя как раз частное.
     
  2. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Что если так попробовать. Генерируем некоторое количество значений и равномерно (или не очень) распределяем по диапазону от 1 до max(id). Делаем выборку и смотрим какие значения "попали". И уже от них генерируем следующие значения в каком-то диапазоне и т.д. Минус в том, что может получится так, что будут выбраны близко лежащие записи, ну а плюс в том, что возможно повезёт и пропустим дыры :)
     
  3. 440Hz

    440Hz Старожил
    Команда форума Модератор

    С нами с:
    21 дек 2012
    Сообщения:
    8.003
    Симпатии:
    1
    Адрес:
    Оттуда
    я делал поле sort и прогонял его раз в сутки. или при вставке записи сразу делать.

    UPDATE table SET sort = rand()

    а потом по нему ключик делал и выборки.

    RAND() просто добавляет при запросе поле в выборку. при онлайн это накладно.
     
  4. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    а никак нельзя без "может, повезет"? или это религиозные мотивы? )
     
  5. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Ну хорошо. У меня частное решение для среднестатистической таблицы с равномерно выпадающими индексами -)

    Просто если у тебя вдруг таблица с id 1-100 и пару id = около 1000, то нужно уже писать в коде какой-то анализатор распределения.
     
  6. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    440Hz я там выше предложил. добавлять чисто max(randid), удалять массово посложнее.
    а так у тебя еще порядок вывода не изменяется чаще раза в сутки