1

検索しましたが、クエリにうまく適合できる解決策を見つけることができませんでした。

広告バナーを保持するデータベースを構築し、スクリプトが回転して各バナーを連続して表示しますが、テーブルを検索してCTR(クリック率)が最も高いバナーを表示するクエリを追加しようとしています。 MINインプレッション(バナーが表示された回数)とMAXクリック(バナーがクリックされた回数)

検索クエリのさまざまな組み合わせを試しましたが、構文が間違っているものもあれば、正しい構文であるように見えるものもありますが、期待どおりの結果が得られません。これが最後に試したクエリです。

$query = "SELECT banner_id,banner_url,banner_alt,banner_size FROM banner_ads WHERE $banner_niche$banner_size banner_enable=1 AND banner_impressions=(SELECT MIN(banner_impressions) FROM banner_ads WHERE banner_clicks=(SELECT MAX(banner_clicks) FROM banner_ads));";
$result = mysql_query($query) or die('Query failed: ' . mysql_error() . "\nQuery: $query");
$row = mysql_fetch_array($result, MYSQL_NUM);
$banner_id = $row[0];
$banner_url = $row[1];
$banner_alt = $row[2];
list($banner_width, $banner_height) = split("x", $row[3]);

フィールドの内容の例は次のとおりです。

banner_id / banners row ID number : 1
banner_url / URL to the banner image : http://somesite.com/banner.jpg
banner_alt / banner alt text : Visit SomeSite.com
banner_size / size of the banner : 468x60
banner_niche / the category of the banner : books
banner_enable / is the banner set to display or not : 1
banner_impressions / number of times banner has been shown : 1000
banner_clicks / number if time banner has been clicked : 50

したがって、クリック数が最も多く、表示回数が最も少ないバナーをテーブルで検索するためのクエリが必要です。

----------------------------------------------
banner_id | banner_impressions | banner_clicks
----------------------------------------------
1         | 1000               | 50
2         | 100                | 80
3         | 2000               | 90
----------------------------------------------

したがって、上記の例では、banner_id2が基準に一致します。(関連性がないため、例の他のフィールドはスキップしました)

よろしくお願いします。私が達成しようとしていることを十分に説明できたと思います。

4

1 に答える 1

0

バナー広告に対するクリックの比率を最大にするには、このクエリが機能します

  select banner_id, banner_impressions, banner_clicks, rank() over 
    (order by click_toimpression DESC)
    as ranks FROM
        (
 select banner_id, banner_impressions, banner_clicks, 
    (banner_clicks /  banner  impressions) 
    as Click_ToImpression FROM banner_ads
    );

-最高ランクの場合

   Select * FROM
    (
  select banner_id, banner_impressions, banner_clicks, rank() over 
    (order by click_toimpression DESC)
    as ranks FROM
        (
 select banner_id, banner_impressions, banner_clicks, 
    (banner_clicks /  banner  impressions) 
    as Click_ToImpression FROM banner_ads
    )) WHERE ranks = 1

;

 MySQL

  select banner_id, banner_impressions, banner_clicks, 
    (banner_clicks /  banner  impressions) 
    as Click_ToImpression FROM banner_ads) ORDER BY Click_toImpression DESC 
    LIMIT 1;

これはあなたの比率をランク付けします。最高値を取得するには、1行だけが必要な場合は、その中から最大値を選択します。

これにより、最小値と最大値を任意に取得してそこから情報を収集しようとするのではなく、クリックとバナーの広告比率でランク付けされます。これはあなたが探しているもの、そして私がこの問題にどのように取り組むかという線に沿っていると思います。

于 2013-02-26T05:17:23.133 に答える