За последние 24 часа нас посетили 193254 программиста и 1976 роботов. Сейчас ищут 2022 программиста ...

помогите с логикой

Тема в разделе "PHP для новичков", создана пользователем bxN5, 25 дек 2009.

  1. bxN5

    bxN5 Активный пользователь

    С нами с:
    15 янв 2009
    Сообщения:
    51
    Симпатии:
    0
    Вообщем нужно написать маленький скриптик примера работы банерной сети на локалхосте
    сделал таблицу бд прикрутил авторизацию регистрацию а вот тут уже возникли вопросы:
    у меня есть в базе несколько рекламных ссылок от нескольких юзеров, как их по очереди выводить? а главное юзер или админ не важно может выставить например количество сколько раз должна прокрутится эта ссылка, и как это определять? и вообще как обработать то событие что ссылка уже показалась?

    желательно маленькие примерчики на пхп что бы лучше понять
     
  2. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
  3. bxN5

    bxN5 Активный пользователь

    С нами с:
    15 янв 2009
    Сообщения:
    51
    Симпатии:
    0
    мне лучше логическое объяснение поэтапно
    в чужом а если еще быдлокоде вообще не реально разобраться
     
  4. lexa

    lexa Активный пользователь

    С нами с:
    22 июл 2007
    Сообщения:
    1.746
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    bxN5, задачей от преподавателя пахнет. Чё, пил весь семестр? :)

    1. Вывод по очереди. Нафига по очереди? Тебе нужно кол-во показов "выполнить". Ну и какая разница в каком порядке выводить. Выводи случайно.

    2. См. п.1. Ящитаю, определить это должен случай. Но можно добавить поле "вес" для банера. Если пользователь больше заплатил, то админ (это ответ на вопрос) выставляет "вес" банера и тот крутится несколько чаще иных.

    3. Пиши в БД поля: количество показов и кол-во прокруток. Т.е. изначально в первом поле 50 (раз прокрутить надо), во втором 0 (уже прокручено). При показе делай update таблица set ... поле = (поле + 1). Так будешь знать сколько раз прокрутил банер.

    Кстати,если уж очень хочется выводить по очереди, то выбирай из таблицы банеров и сортируй по весу и по кол-ву показов: order by вес desc, кол-во показов asc.

    Как-то так, да.
     
  5. darkgod

    darkgod Активный пользователь

    С нами с:
    31 мар 2008
    Сообщения:
    201
    Симпатии:
    0
    Я делал при показе баннера апдейт в базу по времени - через мктайм+микросекунды - так намного лучше, а в запросе на показ баннера стоит сортировка по этому полю, и показывается тот баннер, у которого самое маленькое значение данного поля...
     
  6. DarkElf

    DarkElf Активный пользователь

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    darkgod

    у мну стояли: лимит показов + временно интервал показов.
    плюс вес баннера в ротации. соответственно, если у одного 5, у другого 1 - то соотношение показов было примерно 5 к 1.

    вообще, все от нагрузки зависит. если показов много, то апдейт при каждом запросе - зло.

    если так уж надо соблюсти порядок - эффективнее будет использовать memory-таблицу, из которой cron'ом переносить данные в основную. иначе на записи на диск тормозить будет.
     
  7. bxN5

    bxN5 Активный пользователь

    С нами с:
    15 янв 2009
    Сообщения:
    51
    Симпатии:
    0
    спасибо почти доделал,
    только один вопрос появился как в функции при определенном условии вернуть исполнение скрипта в начало функции?
     
  8. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    цикл

    Код (Text):
    1. do {
    2. } while(условие)
    выполняется хотя бы раз. Если условие верно, то пойдет выполнение с начала.
     
  9. bxN5

    bxN5 Активный пользователь

    С нами с:
    15 янв 2009
    Сообщения:
    51
    Симпатии:
    0
    спасибо
    еще вопрос
    $del= mysql_query("DELETE FROM `ban` WHERE `cnt` > `maxcount`") or die("Invalid query: " . mysql_error()) ;
    `cnt` and `maxcount`имена столбцов в базе которые содержат значения
    дело в том что он удаляет как то совершенно рандомно и понятно только ему как он удаляет записи, причем условию они могут как соответствовать так и не соответствовать
    или же
    SELECT id FROM bann WHERE `cnt` >= `maxcount`
    тоже возвращает рандомные айдишники =\
    [​IMG]
     
  10. Simpliest

    Simpliest Активный пользователь

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    так не бывает.
     
  11. Frozen

    Frozen Активный пользователь

    С нами с:
    20 окт 2008
    Сообщения:
    540
    Симпатии:
    0
    Адрес:
    Москва
    cnt, maxcount случаем не varchar?