0

我的问题在表结构下进一步描述。

这是我的广告横幅系统的表格:

横幅

id(唯一键)

标题

横幅src

最大击数

麦克利克

主动来自

活动到

拿督

横幅点击量(节目数量)

id(唯一键)

ip

bannerid(索引)(指banner.id)

拿督

bannerklik(点击次数)

id(唯一键)

ip

bannerid(索引)(指banner.id)

拿督

问题

我想要的是进行查询,从表“横幅”中选择横幅 WHERE:

(b.usertype = $usertype 或 b.usertype = '0')

( activefrom <= now activeuntil >= now

或者

maxklik > 'bannerklik' 中的行数,其中bannerklik.bannerid = banner.id

或者

maxhits > 'bannerhits' 中的行数,其中 bannerhits.bannerid = banner.id )

你能帮我创建一个查询吗,因为我真的不知道怎么做:)

4

1 回答 1

0

我认为以下应该有效..(假设您在横幅表中有一个用户类型字段)

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() AND b.activeuntil >= curdate()
    2. b.maxklik > count(DISTINCT(bk.id)
    3. b.maxhits > count(DISTINCT(bh.id)

我对么 ?

于 2010-01-12T23:39:08.770 回答