带多个表的mysql查询
我的问题将在表结构下进一步描述 这是我的广告横幅系统表: 横幅 id(唯一密钥) 头衔 横幅 maxhits 马克斯克利克 活跃的 活跃的 达托 横幅(展览数量) id(唯一密钥) 知识产权 bannerid(索引)(参考banner.id) 达托 bannerklik(点击次数) id(唯一密钥) 知识产权 bannerid(索引)(参考banner.id) 达托 问题 我要做的是进行一个查询,从“banner”表中选择一个banner,其中: (b.usertype=$usertype或b.usertype='0') 及 ( activefrom=现在 或 maxklik>bannerklik中的行数,其中bannerklik.bannerid=banner.id 或 maxhits>bannerhits中的行数,其中bannerhits.bannerid=banner.id )带多个表的mysql查询,mysql,ads,banner,multiple-tables,Mysql,Ads,Banner,Multiple Tables,我的问题将在表结构下进一步描述 这是我的广告横幅系统表: 横幅 id(唯一密钥) 头衔 横幅 maxhits 马克斯克利克 活跃的 活跃的 达托 横幅(展览数量) id(唯一密钥) 知识产权 bannerid(索引)(参考banner.id) 达托 bannerklik(点击次数) id(唯一密钥) 知识产权 bannerid(索引)(参考banner.id) 达托 问题 我要做的是进行一个查询,从“banner”表中选择一个banner,其中: (b.usertype=$usertype或b.
你能为我创建一个查询吗,因为我真的不知道该怎么做:)我认为下面的方法应该可行。。(假设标题表中有usertype字段)
选择
b、 id,b.标题,b.横幅
从…起
横幅b
左侧外部连接横幅在b.id=bh.bannerid上显示bh
b.id=bk.bannerid上的左外连接bannerklik bk
哪里
(b.usertype='0'或b.usertype=$usertype)
及
(b.activefrom=curdate())
分组
b、 id,b.title,b.bannersrc,b.maxklik,b.maxhits
有
(
b、 maxklik>计数(不同的(bk.id))
或
b、 最大命中数>计数(不同的(bh.id))
)
[编辑1]
好的,让我们修改这里的条件
要显示广告,您希望以下条件同时为真
我说的对吗?任何表上都没有usertype字段…非常感谢..它似乎工作正常-至少没有mysql错误:Pit将选择用户类型为0的横幅或您提供的横幅,其活动日期包括今天,并且其maxklik或maxhits未被最大化,这并不完全符合我的要求:p要选择的横幅是:具有maxklik>count(DISTINCT(bk.id))或maxhits>count(DISTINCT(bh.id))或b.activefrom=curdate()的b.usertype='0'或b.usertype=$usertype只是为了让广告商可以向一种特殊类型的用户展示他们的广告-如果你是usertype 1,你只能在usertype=0或1的地方展示,如果是usertype=0或2的地方,等等。好的。我们需要建立正确的条件分组。我将编辑我的答案(进行格式设置)
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) )
)