1

データベースから広告を順番に選択する手順を作成しようとしています。そして、最終的に選択された広告行を返し、ビュー値をインクリメントします。

私が現在取り組んでいる部分は

  1. 'ads'テーブルから結果をプルします。'city'は指定された都市と一致し、'spot'は指定されたスポット名と一致します。
  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関数に問題があります。グループ関数の無効な使用エラーが発生します。また、関数をサブクエリ内に移動しようとしましたが、何らかの理由で、サブクエリが1つの結果のみを返すようになります。

サブクエリの結果

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 に答える