- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Все что нужно знать о DDоS-атаках грамотному менеджеру
И как реагировать на "пожар", когда неизвестно, где хранятся "огнетушители
Антон Никонов
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Приветствую.
Возникла диллема: пользователю с БД нужно при каждом обращении к скрипту выводить уникальные записи, но в случайном порядке. Т.е. вести сводную таблицу с учетом записей, которые пользователь уже просмотрел.
Как планирую:
1 таблица: список записей
2 таблица: связка пользователь-просмотренная_запис ь
При запросе к скрипту обращаюсь ко 2 таблице, вытягиваю список просмотренных пользователем записей, затем с первой таблицы вытягиваю случайно одну запись по условию "WHERE id NOT IN (список_просмотренных_записей) ORDER by RAND()".
Возникает 2 проблемы:
1. Таблица №2 со временем раздуется до миллионов записей и даже при небольших длинах самих строк будет долгая обработка запроса.
2. Список просмотренных записей у конкретного пользователя тоже может "распухнуть" до сотен тысяч номеров, что увеличит объем запроса в условии.
Понимаю, что должен быть более практичный вариант решения данной задачи. Буду благодарен за помощь.
P.S. Поиск юзал и не только здесь.
ORDER by RAND() лучше не использовать при большой таблице
лучше использовать LIMIT
$rand = rand(0, $count);
LIMIT $rand, 1;
По поводу записей, можно попробовать выводить рандомно записи за сегодня, а на следующий день, очищать старые метки с прочитанными записями. Так не будет сильно разрастаться таблица, да и очищаться будет регулярно.
Если правильно понял, то вариант такой:
Имеем:
А - таблица товаров, большая
B - таблица просмотренных товаров
С - таблица выбранных случайных товаров для этого посетителя
Если таблица С пуста, заполняем ее случайными товарами из таблицы А которых нет в B,
При просмотре некоторого товара Т, добавляем его в таблицу B
При просмотре товара Т имеющегося в таблице С, удаляем его из нее.
Данные в вспомогательных таблицах пользователля хранить скажем не более 2 мес и 1000 шт.
Что-то проще в голову ничего не приходит
Понял, спасибо за идеи, буду пробовать.