2015-05-05 28 views
0

隨着下面的MySQL查詢,我想匹配,其中page既是/signup,然後在後面的userflow /confirmMySQL的漏斗多個與運算

SELECT COUNT(*) as `total` FROM (

    SELECT COUNT(DISTINCT t.user_id) AS `visitors` 
    FROM `tracks` t 
    JOIN `user_details` u ON u.id=t.user_id AND u.site_id=t.site_id 
    WHERE t.site_id='334565' 
    AND (t.page = '/signup' AND t.page = '/confirm') 
    AND t.timestamp BETWEEN '2015-01-23 00:00:00' AND '2015-04-30 23:59:59' 
    GROUP BY t.user_id, t.track_id 
) as a 

的主要問題與此查詢下來,是MySQL沒有按」 t按我嘗試使用它的方式工作(不正確)。 另一個問題是退回的訂單可能不正確,因此還需要按照指定的順序。

也許這個查詢需要完全不同,但我不知道我在正確的軌道上。

有沒有人以前做過或有沒有更好的方法來完成工作?

請注意,上面的WHERE子句可以匹配不僅僅是page更多,可以是任何東西,如t.referreru.somethingelse

另一個例子是:

SELECT COUNT(*) as `total` FROM (

    SELECT COUNT(DISTINCT t.user_id) AS `visitors` 
    FROM `tracks` t 
    JOIN `user_details` u ON u.id=t.user_id AND u.site_id=t.site_id 
    WHERE t.site_id='334565' 
    AND (u.browser = 'chrome' AND t.referrer_host = 'google.com' AND t.page = '/confirm' and t.page = '/preferences') 
    AND t.timestamp BETWEEN '2015-01-23 00:00:00' AND '2015-04-30 23:59:59' 
    GROUP BY t.user_id, t.track_id 
) as a 

u.browsert.referrer_hostt.page是目標,我將trying作爲一個漏斗展示給大家。分析程序如何做到這一點。

+0

(t.page ='/ signup'或t.page ='/ confirm'),並且有count(distinct t.page)= 2 – jarlh

+0

@jarlh它需要在記錄集中匹配,而不是返回1行與任一。 (用戶流) –

+0

@smftre你需要包含你的表模式和一些數據。有點難以理解,因爲它的立場 –

回答

1

我假設這是跟蹤訪問者的網頁(不是一個艱難的假設),每個URL /頁面端點都有自己的條目在跟蹤表中。

爲了找到碰到這兩個頁面的用戶,您需要自行加入跟蹤表。事情是這樣的:

SELECT COUNT(DISTINCT t1.user_id) AS `visitors` 
FROM `tracks` t1 
JOIN `user_details` u ON u.id=t1.user_id AND u.site_id=t1.site_id 
join `tracks` t2 on t1.site_id = t2.site_id and u.id = t2.user_id and t1.track_id <> t2.track_id 
WHERE t1.site_id='334565' 
AND (t1.page = '/signup' AND t2.page = '/confirm') 
AND t1.timestamp BETWEEN '2015-01-23 00:00:00' AND '2015-04-30 23:59:59' 

我不認爲有任何需要分組,因爲我認爲你只是想已經簽署了,然後確認訪問者的不同數量。

+0

這是否意味着我每次添加「目標」時都必須加入另一個表格?這看起來是一個非常不完善的方法。我是否錯誤地處理了這個問題? –

+0

加入並不是一件壞事。但如果你想跟蹤流量(基本上是分層數據),那麼是的,這基本上是你如何做到的。另一方面,如果你不關心訪問順序,你可以做得更簡單一些 –