1

我正在尝试创建一个从数据库中轮流选择广告的过程。并最终返回选定的广告行并增加视图值。

我目前正在处理的部分应该

  1. 从“广告”表中提取结果,其中“城市”与给定城市匹配,“地点”与给定地点名称匹配。
  2. 添加一个额外的“num”列来枚举结果行。
  3. 从这些结果中,选择 'num' 列与 SUM('views') % COUNT(id) 匹配的行

只要在最终选择并返回广告时增加视图列,这应该允许我轮流显示广告

我目前正在处理的代码是......

SET @t1=-1;

SELECT * 
  FROM (SELECT @t1 := @t1+1 AS num, ads.* 
          FROM ads 
         WHERE city = 'Maitland' 
           AND spot = 'home-banner' 
      ORDER BY id ASC) dt 
 WHERE dt.num = SUM(dt.views) % COUNT(dt.id);

...但是我遇到了 SUM 和 COUNT 函数的问题。我收到无效使用组功能错误。我也尝试将函数移动到子查询内部,但由于某种原因,这会导致子查询只返回一个结果。

子查询结果

num id  spot    city    views
0   1   home-banner Maitland    0
1   2   home-banner Maitland    2
2   3   home-banner Maitland    0
3   4   home-banner Maitland    0
4   5   home-banner Maitland    0
5   6   home-banner Maitland    0
4

1 回答 1

1

尝试这个:

SELECT * FROM (
  SELECT @t1 := @t1 + 1 AS num, ads.*
  FROM ads, (SELECT @t1 := -1) init
  WHERE city = 'Maitland' AND spot = 'home-banner'
  ORDER BY id ASC
) dt
WHERE dt.num = (
  SELECT SUM(views) % COUNT(id) FROM ads
  WHERE city = 'Maitland' AND spot = 'home-banner')
于 2012-03-26T01:14:17.360 回答