Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带多个表的mysql查询_Mysql_Ads_Banner_Multiple Tables - Fatal编程技术网

带多个表的mysql查询

带多个表的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.

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

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

横幅 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 )


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

我认为下面的方法应该可行。。(假设标题表中有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]

好的,让我们修改这里的条件

要显示广告,您希望以下条件同时为真

  • b、 usertype必须是“0”或在$usertype变量中传递的某个值
  • 下列任何一条规则
  • b、 activefrom=curdate()
  • b、 maxklik>计数(不同的(bk.id)
  • b、 最大点击数>计数(不同的(bh.id)

  • 我说的对吗?

    任何表上都没有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) )
         )