баннерная реклама mysql-запрос с несколькими таблицами - PullRequest
0 голосов
/ 13 января 2010

Моя проблема описана ниже в структуре таблицы.

Это мои таблицы для моей системы рекламных баннеров:

баннер

id (уникальный ключ)

название

bannersrc

maxhits

maxklik

activefrom

activeuntil

Дато

bannerhits (количество показов)

id (уникальный ключ)

ф

bannerid (index) (имеется в виду banner.id)

Дато

bannerklik (количество кликов)

id (уникальный ключ)

ф

bannerid (index) (имеется в виду banner.id)

Дато

вопрос

Я хочу сделать запрос, который выбирает баннер из таблицы 'banner', ГДЕ:

(b.usertype = $ usertype ИЛИ b.usertype = '0')

И

( activefrom <= сейчас activeuntil> = сейчас

OR

maxklik> количество строк в 'bannerklik', где bannerklik.bannerid = banner.id

OR

maxhits> количество строк в 'bannerhits', где bannerhits.bannerid = banner.id )

Можете ли вы создать запрос для меня, потому что я действительно не понимаю, как это сделать:)

1 Ответ

0 голосов
/ 13 января 2010

я думаю, что следующее должно работать .. (при условии, что у вас есть поле типа пользователя в таблице баннеров)

SELECT
     b.id, b.title, b.bannersrc
FROM
     banner b 
     LEFT OUTER JOIN bannerhits bh ON b.id = bh.bannerid
     LEFT OUTER JOIN bannerklik bk ON b.id = bk.bannerid 
WHERE
     (b.usertype = '0' OR b.usertype = $usertype)
     AND 
     (b.activefrom <= curdate() AND b.activeuntil >= curdate())
GROUP BY 
     b.id, b.title, b.bannersrc, b.maxklik, b.maxhits
HAVING
     ( 
      b.maxklik > count( DISTINCT(bk.id) )
      OR
      b.maxhits > count( DISTINCT(bh.id) )
     )

[РЕДАКТИРОВАТЬ 1]

хорошо, давайте пересмотрим условия здесь.

Вы хотите, чтобы одновременно выполнялись следующие условия для показа объявления

  1. b.usertype будет '0' или некоторым значением, которое вы передаете в переменную $ usertype
  2. любое из следующих правил
    1. b.activefrom <= curdate () И b.activeuntil> = curdate ()
    2. b.maxklik> count (DISTINCT (bk.id)
    3. b.maxhits> count (DISTINCT (bh.id)

я прав?

...