我已经搜索过,但是无法找到可以成功地适应我的查询的解决方案。

我建立了一个保存广告横幅的数据库,我的脚本旋转并连续显示每个横幅,但是我试图添加一个查询,该查询将在表中搜索并显示基于最高点击率(点击率)的横幅其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_id 2将符合条件。 (我跳过了示例中的其他字段,因为它们不相关)

在此先感谢大家,我希望我已经充分解释了我要实现的目标。

最佳答案

为了获得最高的横幅广告点击率,此查询将有效

  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;


这将对您的比率进行排名。要获得最高价,只需从中选择最高价即可。

这是通过点击广告到横幅广告的比率对它们进行排名,而不是任意获取最小值和最大值并尝试从中收集信息。我认为这与您要查找的内容以及我将如何处理此问题类似。

关于mysql - MySQL如何在同一行中查找和比较最小值和最大值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15081660/

10-10 22:42