Не знаю, как реализовать "приоритет" (или "вес") - MySQL

Формулировка задачи:

Нужно создать базу для приложения, выдающего ссылки с рекламными банерами. С одной стороны есть баннеры, с другой сайты, их запрашивающие мысль была такова - создать в базе две таблицы: 1. Id, Banner_file_name, last_shown (время последнего показа), referal (поле, отвечающее за "набор сайтов, где этот баннер должен показываться", counter (счетчик показов), (ну и всякая там мишура, типа поля типа "описание", и пр., несущественно) 2. Id, Site_address, описание (чисто информация для человеков) в приложение приходит запрос с "адресом сайта" (из второй таблицы). Дальнейший мой ход рассуждений был таков: из 1-й таблицы по соответствию site_address = referal выбирается строка С САМЫМ СТАРЫМ ВРЕМЕНЕМ ПОСЛЕДНЕГО ПОКАЗА, вынимается имя файла с банером, отдается назад в приложение, после чего обновляется счетчик "время последнего показа" (за счет этого счетчика, я надеюсь, будет осуществляться "ротация" банеров). Так вот, вопрос, который я вообще не представляю, как реализовать, связан с пожеланием возможности в программе назначить одним банерам приоритет в показе по отношению к другим. То есть, допустим есть три баннера - А, Б и В. И вот баннер В нужно показывать (допустим) в три раза чаще, чем баннеры А и Б. То есть, это и есть главный вопрос темы - КАК реализовать такую возможность? И второй вопрос, про вариант решения которого у меня "смутные представления" есть, но не уверен. Если один баннер должен показываться на нескольких сайтах, как лучше всего прописать их в поле referal таблицы 1. Я думал вписывать туда разделенные запятыми Id-ы со второй таблицы, а проверку при выборке выполнять с помощью IN. Может есть решения получше?

Код к задаче: «Не знаю, как реализовать "приоритет" (или "вес") - MySQL»

textual
SET @offset = 0, @point = FLOOR(RAND() * 100);
 
SELECT * FROM таблица WHERE @offset < @point AND (@offset := @offset + priority) >= @point;

9   голосов, оценка 4.444 из 5


СОХРАНИТЬ ССЫЛКУ