Не знаю, как реализовать "приоритет" (или "вес") - MySQL
Формулировка задачи:
Нужно создать базу для приложения, выдающего ссылки с рекламными банерами.
С одной стороны есть баннеры, с другой сайты, их запрашивающие
мысль была такова - создать в базе две таблицы:
1.
Id
,Banner_file_name
,last_shown
(время последнего показа),referal
(поле, отвечающее за "набор сайтов, где этот баннер должен показываться",counter
(счетчик показов), (ну и всякая там мишура, типа поля типа "описание", и пр., несущественно) 2.Id
,Site_address
,описание
(чисто информация для человеков) в приложение приходит запрос с "адресом сайта" (из второй таблицы). Дальнейший мой ход рассуждений был таков: из 1-й таблицы по соответствию site_address = referal выбирается строка С САМЫМ СТАРЫМ ВРЕМЕНЕМ ПОСЛЕДНЕГО ПОКАЗА, вынимается имя файла с банером, отдается назад в приложение, после чего обновляется счетчик "время последнего показа" (за счет этого счетчика, я надеюсь, будет осуществляться "ротация" банеров). Так вот, вопрос, который я вообще не представляю, как реализовать, связан с пожеланием возможности в программе назначить одним банерам приоритет в показе по отношению к другим. То есть, допустим есть три баннера - А, Б и В. И вот баннер В нужно показывать (допустим) в три раза чаще, чем баннеры А и Б. То есть, это и есть главный вопрос темы - КАК реализовать такую возможность? И второй вопрос, про вариант решения которого у меня "смутные представления" есть, но не уверен. Если один баннер должен показываться на нескольких сайтах, как лучше всего прописать их в поле referal таблицы 1. Я думал вписывать туда разделенные запятыми Id-ы со второй таблицы, а проверку при выборке выполнять с помощью IN. Может есть решения получше?Решение задачи: «Не знаю, как реализовать "приоритет" (или "вес")»
textual
Листинг программы
SET @offset = 0, @point = FLOOR(RAND() * 100); SELECT * FROM таблица WHERE @offset < @point AND (@offset := @offset + priority) >= @point;
Объяснение кода листинга программы
В данном коде выполняется выборка данных из таблицы таблица
с использованием двух переменных: @offset и @point.
- Переменная @offset инициализируется значением 0.
- Переменная @point вычисляется как результат деления случайного числа на 100.
- В строке WHERE формируется условие для выборки данных. В данном случае выбираются все строки, удовлетворяющие условию, что значение переменной @offset меньше значения переменной @point и значение переменной @offset, увеличенное на значение переменной priority, больше или равно значению переменной @point. Список переменных и их значений:
- SET @offset = 0 - переменная @offset инициализируется значением 0.
- SET @point = FLOOR(RAND() * 100) - переменная @point вычисляется как результат деления случайного числа на 100.
- SELECT * FROM таблица WHERE @offset < @point AND (@offset := @offset + priority) >= @point - в данном условии используется переменная @offset, значение которой увеличивается на значение переменной priority. Пожалуйста, обратите внимание, что в запросе может быть использована функция RAND(), которая генерирует случайное число. Для ее работы необходимо наличие оператора HAVING в SQL запросе.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д