2013-04-22 32 views
0

是否有可能將這3個查詢放入一個sql查詢中?如何將此sql查詢簡化爲一個

我特地到加入,但不能工作如何獲得計數的印象和點擊得來 - 見下文

$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; 
    } 
+0

你真的不應該使用'mysql_ *'函數 - 他們在這一點過時。 – 2013-04-22 07:25:18

回答

1

你可以這樣做:

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或準備好的語句。

0

,你可以使用子查詢這樣

SELECT 
    tt.*, 
    tt1.c AS count_1 
FROM tracking_table tt 
LEFT OUTER JOIN (
    SELECT 
     rec_trk_id, 
     COUNT(*) AS c 
    FROM tracking_table 
    WHERE rec_use_ip LIKE 'Ad loaded' 
     AND rec_use_date > '2013-04-16 17:05:00' 
     AND rec_use_date < '2013-04-23 00:00:00' 
    GROUP BY rec_trk_id 
) AS tt1 
    ON tt1.rec_trk_id = tt.rec_trk_id