MySQL漏洞多个AND

时间:2015-05-05 14:32:43

标签: mysql sql

使用以下MySQL查询,我想匹配page同时/signup的位置,然后在用户流/confirm

中向下匹配
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不能像我尝试使用它那样工作(错误)。 另一个问题是返回的订单可能不正确,因此也需要按指定的顺序。

也许这个查询需要以完全不同的方式完成,但我不确定我是否在正确的轨道上。

之前是否有人这样做过,或者有更好的方法来完成工作?

请注意,上述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将它们全部显示为漏斗。分析程序如何实现它。

1 个答案:

答案 0 :(得分:1)

我假设这是跟踪网页访问者(不是一个艰难的假设),每个网址/页面端点在跟踪表中都有自己的条目。

要查找同时访问这两个页面的用户,您需要将跟踪表加入自身。像这样:

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'

我认为没有必要进行分组,因为我认为您只需要注册的访问者数量不同,然后确认。