Как раз давече делал такое.
Nexus 16.02.2004 08:47
Баннерную подсистему лучше всего организовывать как вызов внешнего ресурса через iframe.
1. Показ в рандомном порядке у меня был реализован примерно так:
Яваскриптом на странице генеришь случайное число(как правило для того чтобы сраницы с баннерами не кешировались), это число подставляешь параметром к вызову страницы баннера. Таким образом баннеры вызванные с одной страницы будут иметь одинаковый параметр.
Далее после выборки баннера делаем update поля last_pid, в которое заносим наше рандомное число со страницы. При следующей выборке уже показанный баннер попадет под условие last_pid!="наше рандомное число со страницы" и повторно на одной странице показан не будет.
2. Вводишь в таблицу такое понятие как вес(weight) баннера, т.е. число в пределах, к примеру, 1..5. При выборке используем его след. образом:
...
order by
views*weight
...
где views = количество просмотров.
Таким образом при весе в 3,2,1 из 6 показов будут показаны первый - три раза, второй - два и третий один.
И еще пару моментов, которые тебе однозначно пригодятся.
Полей с просмотрами должно быть два, одно - фактическое, для статистики, другое для операций по выборке. Второе при добавлении баннера следует обнулять. Таким образом вновь добавленный баннер станет равноценным по отношению к показам остальных.
При выборках баннера обязательно делать LOCK/UNLOCK таблицы с баннерами, т.к. повторный select может не включить в себя результаты после update и на странице вылезет два одинаковых баннера.