За последние 24 часа нас посетили 16082 программиста и 1833 робота. Сейчас ищут 1083 программиста ...

Случайная выборка )))

Тема в разделе "PostgreSQL", создана пользователем Вльдемар, 1 фев 2008.

  1. Вльдемар

    Вльдемар Активный пользователь

    С нами с:
    20 май 2006
    Сообщения:
    635
    Симпатии:
    0
    Адрес:
    Белхород
    в мускуле пишем
    Код (Text):
    1. order by rand() limit 1
    а как в postgresql???

    у меня одна мысль - написать функцию
     
  2. Dagdamor

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

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    Вльдемар
    Если нужна одна запись - пользоваться таким методом крайне не рекомендуется!
    Нужно выбирать количество записей, генерировать случайный номер и выбирать запись с этим номером через LIMIT. Такие два запроса будут работать гораздо быстрее, чем один с RAND().
    [offtopic] Жаль, что разработчики MySQL до этого не дотумкали :/ [/offtopic]
     
  3. Вльдемар

    Вльдемар Активный пользователь

    С нами с:
    20 май 2006
    Сообщения:
    635
    Симпатии:
    0
    Адрес:
    Белхород
    Все нашел )))

    Код (Text):
    1.  
    2. order by [b]random()[/b]
     
  4. armadillo

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

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

    Вльдемар Активный пользователь

    С нами с:
    20 май 2006
    Сообщения:
    635
    Симпатии:
    0
    Адрес:
    Белхород
    я уже передумал делать эту выборку, но думаю в будущем пригодится
     
  6. Dagdamor

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

    С нами с:
    4 фев 2006
    Сообщения:
    2.095
    Симпатии:
    1
    Адрес:
    Барнаул
    armadillo
    Я говорю о случае LIMIT 1. Уж на него-то можно было простейшую оптимизацию добавить и не лопатить весь набор данных в таблице.
     
  7. Vladson

    Vladson Старожил

    С нами с:
    4 фев 2006
    Сообщения:
    4.040
    Симпатии:
    26
    Адрес:
    Estonia, Tallinn
    В мускуле в случае выборки одной записи проще делать 2 запроса, один COUNT второй
    PHP:
    1. <?php
    2. $sql = "SELECT .......... WHERE id <=" . rand(1, $records_count) . " LIMIT 1";
    3. ?>
    В постгресе не помню, но что-то мне подсказывает что надо покурить сначала ман, а потом для уверенности протестировать. (просто на всякий случай чтоб как в мускуле не получилось, сначала ман покуришь а потом тормоза будут)