php - 如何将这个sql查询简化为一个

标签 php mysql sql join

是否可以将这3个查询放入一个sql查询中?

我已经研究过 JOIN,但无法弄清楚如何获取展示次数和点击次数 - 请参阅下文

$date_where = "   rec_use_date > '2013-04-16 17:05:00' AND rec_use_date < '2013-04-23 00:00:00'  ";

    $q = " SELECT * FROM tracking_table ";
    $q .= " WHERE ".$date_where;



    $o =0;
    $result = mysql_query($q); 
    while ($db = mysql_fetch_assoc($result)) {

        $rowKey = md5($db['rec_trk_id']);


        $rows[$rowKey]['use_ip'] = $db['rec_use_ip'];
        $rows[$rowKey]['ad_code'] = $db['rec_trk_id'];
        $rows[$rowKey]['ad_location'] = $db['rec_tar_page'];


        $q_impressions = mysql_query("SELECT COUNT(*) FROM tracking_table WHERE rec_trk_id = '{$db['rec_trk_id']}' AND rec_use_ip LIKE 'Ad loaded' AND ".$date_where) or die(mysql_error());
        $db_impressions = mysql_fetch_assoc($q_impressions);
        $rows[$rowKey]['impressions'] = $db_impressions['COUNT(*)'];
        ++$o;


        $q_clicks = mysql_query("SELECT COUNT(*) FROM tracking_table WHERE rec_trk_id = '{$db['rec_trk_id']}' AND rec_use_ip NOT LIKE 'Ad loaded' AND ".$date_where) or die(mysql_error());
        $db_clicks = mysql_fetch_assoc($q_clicks);
        $rows[$rowKey]['clicks'] = $db_clicks['COUNT(*)'];



        $rows[$rowKey]['conversion'] = round((($db_clicks['COUNT(*)']/$db_impressions['COUNT(*)'])*100),2);

        ++$o;
    }

最佳答案

你可以这样做:

SELECT 
  SUM(CASE WHEN rec_use_ip LIKE     'Ad loaded' THEN 1 ELSE 0 END) AS LoadedCounts,
  SUM(CASE WHEN rec_use_ip NOT LIKE 'Ad loaded' THEN 1 ELSE 0 END) AS NotLoadedCounts
FROM tracking_table 
WHERE rec_trk_id = '{$db['rec_trk_id']}' AND ".$date_where

请注意:请停止使用 mysql_* 扩展,它们已被弃用,并且您的代码容易受到 SQL Injection 的攻击。 。使用PDO或准备好的语句。

关于php - 如何将这个sql查询简化为一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16141515/

相关文章:

PHP Mysql If 语句不起作用

PHP Flush() 在 Chrome 中不工作

php - 生产和 XAMPP 上的不同 css

mysql - 使用@variables := in delphi query does not work

php - codeigniter 2 使用 pdo 或 php mysql 函数作为它的事件记录?

php - 将远程数据库 (mysql) 与 sqlite 数据库同步,反之亦然

mysql - 将 LAMP 应用程序移植到 EC2

mysql - 选择具有最大字符串长度的结果

sql - SQL Server 中的 MS Project 数据

c# - 跟踪用户点数(如 SO)