0

私の問題は、テーブル構造の下でさらに説明されています。

これは私の広告バナー システムのテーブルです。

バナー

id (ユニークキー)

題名

バナーズrc

マックスヒッツ

マックスクリク

アクティブから

アクティブになるまで

データ

バナーヒッツ(番組数)

id (ユニークキー)

IP

bannerid (index) (banner.idを参照)

データ

bannerklik (クリック数)

id (ユニークキー)

IP

bannerid (index) (banner.idを参照)

データ

質問

私が欲しいのは、テーブル 'banner' WHERE からバナーを選択するクエリを作成することです:

(b.usertype = $usertype OR 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 に答える