На сайте есть пользователи. И есть картинки. Для каждого пользователя и картинки есть своя таблица sql.
Есть страница, которая рандомно показывает картинку пользователю, после нажатия на кнопку далее должна появляться рандомно любая другая картинка, но ни в коем случае не та, что уже была.
Как сделать так, чтобы картинки не повторялись? Не нужен код, нужна именно логика как это сделать. Ничего в голову не приходит.
Мысль была создать массив переменной, который содержит все id просмотренных картинок, но картинок планируется ну очень много, и мне не кажется, что тогда код будет выполняться быстро как нужно
Исхожу из предположения, что картинок большое количество. Например, миллион:
1)При создании базы создается последовательность чисел для выдачи ID картинкам и перемешивается (например, чтобы номера шли 1, 2, 5, 3, 4). Можно побить на блоки по 100 тысяч. То есть в первом блоке будут перемешанные номера от 1 до 100 тысяч, во втором от 100 тысяч до 200 тысяч и т.д. При вставке картинки будет выбираться ID из этой последовательности.
2) При создании пользователя для него создается рандомная последовательность чисел из числа выданных ID картинкам. Например из 1000 чисел. После того, как пользователь просмотрит 1000 картинок, формируем вторую последовательность из 2го блока. Таким образом каждый пользователь выберет 10 тысяч случайных картинок из миллиона.
Если вдруг пользователь просмотрит все блоки, придется повторить по кругу. Тут полагаемся на то, что пользователь просмотревший 10 тысяч картинок все равно их не вспомнит. Вероятность выбрать повторные картинки из блока есть и не маленькая.
Структура таблиц получится примерно такая:
Pictures
--------
Id_picture, -- ID картинки из перемешанной последовательности
Image --Изображение
Users
--------
Id_user, -- ID пользователя
Name, -- Имя пользователя
Sequence, -- Массив с номерами картинок для выбора
Num_block, -- блок из которого выбираем номера
Num_seq -- номер картинки в последовательности
Если важно, чтобы новые картинки сразу добавлялись к отображаемым, то можно при выдаче ID картинкам оставить пропуски в разумном количестве и новыми картинками заполнять пропуски в уже существующих блоках.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости