Как выбрать случайные записи, каждый раз разные

Тема в разделе "Базы данных", создана пользователем virtualbrest, 15 мар 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. virtualbrest

    virtualbrest

    Регистр.:
    6 май 2007
    Сообщения:
    210
    Симпатии:
    18
    Есть таблица, в ней заголовки новостей, при показе той или иной новости делается выборка по базе по определенным тегам по заголовкам новостей. Так вот как бы это так исхитриться, что бы раз от раза показывать не те же самые новости для тегов, а каждый раз новые.
    Блин, видимо непонятно...

    Так:

    Новость: К нам поступили новые амортизаторы для автомобилей Жигули.

    Теги: поступили новые амотрижаторы Жигули

    В базе полно сообщений с такими словами, и если просто:

    PHP:
    $sql "SELECT id FROM table WHERE zagolovok LIKE '% $tags %' LIMIT 5";
    то выборка делается 5 элементов, содержащих слово $tags обрамленное пробелами. Как построить запрос, что бы эти 5 находились каждый раз разные, причем неважно как, по какой сортировке, главное что бы разные, не обязательно все,но что бы хоть некоторые.
     
  2. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    590
    Добавить в запрос ORDER BY RAND() .
     
    virtualbrest нравится это.
  3. Nikota

    Nikota Создатель

    Регистр.:
    11 фев 2009
    Сообщения:
    42
    Симпатии:
    2
    lightcyber нравится это.
  4. marader

    marader Создатель

    Регистр.:
    28 окт 2008
    Сообщения:
    25
    Симпатии:
    7
    Да вы что!!!!!!!!Вы себе представляете план такого запроса????
    А если записей 1000000????
    :bc::bc::bc:
     
  5. Maxsystems

    Maxsystems Создатель

    Регистр.:
    18 мар 2009
    Сообщения:
    22
    Симпатии:
    2
    SELECT * FROM `table` ORDER BY RAND() LIMIT 5; Всегда им пользовался)))
    В статье выше про 4 варианта, есть интересная запись о минимуме и максимуме, а остальные 2 способа не совсем понял, подустал я..
     
  6. PHP_Master

    PHP_Master

    Регистр.:
    3 фев 2008
    Сообщения:
    2.647
    Симпатии:
    590
    А если без если?
    Приведён простейший пример, так как исходных данных нет никаких.
    Коль уж бороться за чистоту и скорость. то какой план будет у поиска LIKE? ;)
     
  7. virtualbrest

    virtualbrest

    Регистр.:
    6 май 2007
    Сообщения:
    210
    Симпатии:
    18
    Да не народ, искалось именно это, простейший вариант без замутов, ну записей за полгода набралось около 1000, пока скорость работы устраивает :) а там посмотрим... Еще раз спасибо.
     
  8. griffon

    griffon Создатель

    Регистр.:
    12 авг 2006
    Сообщения:
    29
    Симпатии:
    3
    Да без разницы, критерии выборки то можно ограничить limit'ом
    а вообще надо создавать индексы, чтобы пошустрее
     
  9. marader

    marader Создатель

    Регистр.:
    28 окт 2008
    Сообщения:
    25
    Симпатии:
    7
    цитата с хабра лень писать самому порсто

    цитата с хабра лень писать самому порсто
    Если в таблице больше, чем 10 тысяч строк, то ORDER BY RAND() будет работать очень медленно. Гораздо более эффективно будет выполнить два запроса:

    Если в таблице auto_increment'ный первичный ключ и нет пропусков:
    $rnd = rand(1, query('SELECT MAX(id) FROM table'));
    $row = query('SELECT * FROM table WHERE id = '.$rnd);

    либо:
    $cnt = query('SELECT COUNT(*) FROM table');
    $row = query('SELECT * FROM table LIMIT '.$cnt.', 1');
    что, однако, так же может быть медленным при очень большом количестве строк в таблице.

    Добавлено через 2 минуты
    Если у вас ьаза данных на 200000 сначала все ти строки выберуться потом отсортируются(да да все!!!) случайным образом и только потом будут отобранны те что вы укажете в лимите,
     
  10. Arqin

    Arqin

    Регистр.:
    17 мар 2009
    Сообщения:
    185
    Симпатии:
    37
Статус темы:
Закрыта.