N_MONax: Только тем, что он переберёт ВСЕ значения.
EXPLAIN SELECT * FROM dle_post WHERE RAND( ) < 0.001 ORDER BY RAND( ) LIMIT 5
id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE dle_post ALL NULL NULL NULL NULL 4338 Using where; Using temporary; Using filesort
2) сгенерировать 50 штук чисел между этими значениями;
3) Сделать или 50 запросов, или сделать id = IN(число, число, число, число ....), или через UNION. Всё это ориентируясь на последовательность полученных в п.2 значений
4) полученные результаты перевести в массив, а его в свою очередь сериализовать и положить в кеш, обновлять вышеуказанным способом раз в сутки.
5) Доставать массив разсериализовывать и доставать оттуда случайным образом 5 значений, выводить их.
Моменты на которые стоит обратить внимание:
1) если в п.3 есть ещё какие-то WHERE, то обязательно нужно делать индексы, а лучше составные.
2) мы можем получить не 50, а меньше значений - так как некоторые посты могут быть удалены, в скрипте нужно учитывать это.
3) этот пункт для тех, кто может заметить, что здесь псевдослучайность - обычный пользователь врядли будет смотреть больше 10 страниц, а постоянные посетители врядли будут смотреть на случайные посты.
В целом данный способ испробован и успешно работает, а почему б ему не работать :), на сайте с несколькими десятками тысяч уников (от 30 до 80, в среднем - 40-50К), записей где-то около 5-6 тысяч. Проблемы были только один раз, поэтому я и настаиваю на составных индексах, тогда всплыла проблема как раз с этим.
p.s. общий принцип похож на описанный выше modobaks'ом.
Если честно не понял почему победил Рыбак. И удивило, почему Украина ему дала сколько там 12 балов?
одно из преимуществ сайта, за которое требуется просить доплаты - уникальный копипаст :)
Такой сайт с лёгкостью можно организовать на DLE.
вот только поддержка потом превратится в ад :) Если что-то нужно будет дописать нестандартное.
show status like 'handler%';
Handler_commit 0
Handler_delete 0
Handler_discover 0
Handler_prepare 0
Handler_read_first 0
Handler_read_key 0
Handler_read_next 0
Handler_read_prev 0
Handler_read_rnd 5
Handler_read_rnd_next 4359
Handler_rollback 0
Handler_savepoint 0
Handler_savepoint_rollback 0
Handler_update 0
Handler_write 18
То есть, получается просматриваются все записи или почти все.
Только тем, что он переберёт ВСЕ значения.
EXPLAIN SELECT * FROM dle_post WHERE RAND( ) < 0.001 ORDER BY RAND( ) LIMIT 5
1 SIMPLE dle_post ALL NULL NULL NULL NULL 4338 Using where; Using temporary; Using filesort
А ваш способ прям не просматривает все записи :D
snk,
document.getElementById("banner_1").innerHTML=’<scr'+'ipt src=”http://адрес сайта баннерки/”></scr'+'ipt>’;
так попробуйте.
xant, тут ещё возникает момент, есть ли текстовые поля в таблице, и насколько они заполнены.
Один из нормальных путей это:
1) получить MIN(id), MAX(id);
2) сгенерировать 50 штук чисел между этими значениями;
3) Сделать или 50 запросов, или сделать id = IN(число, число, число, число ....), или через UNION. Всё это ориентируясь на последовательность полученных в п.2 значений
4) полученные результаты перевести в массив, а его в свою очередь сериализовать и положить в кеш, обновлять вышеуказанным способом раз в сутки.
5) Доставать массив разсериализовывать и доставать оттуда случайным образом 5 значений, выводить их.
Моменты на которые стоит обратить внимание:
1) если в п.3 есть ещё какие-то WHERE, то обязательно нужно делать индексы, а лучше составные.
2) мы можем получить не 50, а меньше значений - так как некоторые посты могут быть удалены, в скрипте нужно учитывать это.
3) этот пункт для тех, кто может заметить, что здесь псевдослучайность - обычный пользователь врядли будет смотреть больше 10 страниц, а постоянные посетители врядли будут смотреть на случайные посты.
В целом данный способ испробован и успешно работает, а почему б ему не работать :), на сайте с несколькими десятками тысяч уников (от 30 до 80, в среднем - 40-50К), записей где-то около 5-6 тысяч. Проблемы были только один раз, поэтому я и настаиваю на составных индексах, тогда всплыла проблема как раз с этим.
p.s. общий принцип похож на описанный выше modobaks'ом.
купил, называется товар который вам абсолютно ненужен за цену от которой вы не смогли отказаться :)
На сайте около 100 страниц.
А статей сколько?