![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| Win MK 32 |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 492 Регистрация: 15.7.2002 Репутация: нет Всего: нет |
Нужно выбирать из бД случайную строку, но только без посторений. То есть надо засчет сессий запоминать какие строки БД уже были запрошены из браузера. Вот на чем я остановился:
И вот какую я ошибку получаю:
|
||||
|
|||||
| enof |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 837 Регистрация: 23.1.2009 Где: Санкт-Петербург Репутация: 30 Всего: 35 |
Перевести ошибку никак? Нехватает памяти скрипту, так как не с изображениями и ни с чем прожорливым работа не ведется, значит где-то косяк.
При внимательном просмотре обнаружим бесконечный цикл. А бесконечный он, потому что забыто инкрементирование счетчика. Просмотрел темы тс.Интересно, в этот раз хотя бы отпишется, решилась ли проблема? На "спасибо" уже и не стоит надеяться. |
|||
|
||||
| bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: 71 Всего: 315 |
цикл видать бесконечный $_SESSION['counter'] видать всегда <= $maxId
Добавлено через 44 секунды вот задержки, млин |
|||
|
||||
| Win MK 32 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 492 Регистрация: 15.7.2002 Репутация: нет Всего: нет |
По "спасибо" пройдусь, прошу прощения.
А комент мне не помог, перевести ошибку я и сам могу равно как и догадаться что где-то (фиг его знает где) есть бесконечный цикл. Если бы я мог анализировать ошибку точнее, я бы не создал бы эту тему. |
|||
|
||||
| enof |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 837 Регистрация: 23.1.2009 Где: Санкт-Петербург Репутация: 30 Всего: 35 |
|
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Мысль есть - не запоминать показанные топики вообще. Запомнить только некое число, по которому можно воспроизвести всю последовательность и порядковый номер последней показанной записи.
для примера -- в сессии будем запоминать некий $seed для "посеивания" случайного числа srand'ом. Если его нету - мы его случайно придумаем -- последовательность генерируется методом $record[rand(0,$max_counter)], где max_counter - количество всех записей. -- уже показанные записи - пропускаются. осталось только в процессе "перелистывания" запоминать номера предыдущих записей, чтобы rand не сгенерировал уже показанную... Понятно, что такое чудо будет работать только для "статических" списков сообщений. если кто-то что-то изменил/добавил - придется сбрасывать сиды со счетчиками. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| Win MK 32 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 492 Регистрация: 15.7.2002 Репутация: нет Всего: нет |
Всем спасибо. Проблему решил.
ksnk, не понял механизма и идеи. Можно объяснить для новичка? |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Win MK 32, Ну, представим, что мы придумали некое число NNN.
Делаем srand(NNN) и все результаты функции rand после этого будут одинаковыми. Таким образом, у нас одним числом задается целая последовательность чисел. Проверка
Итого, первая "случайная строка" будет с индексом $arr[0], вторая $arr[1] и так далее. Если юзер посмотрел 25 строчек и желает 26-ю, то мы просто "отматываем" на rand'ом 25 позиций и получаем следующую. Проблема только в проверке на то, чтобы такое число еще не встречалось ранее. Итого, нужно запоминать только порядковый номер уже показанной строки и этот самый $seed. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| Win MK 32 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 492 Регистрация: 15.7.2002 Репутация: нет Всего: нет |
||||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Win MK 32, Ну да, циклом. Могут возникнуть проблемы, когда придется отмотать 10000 раз
-------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |