MySQL查询的结构非常复杂

时间:2011-11-17 10:43:10

标签: mysql sql

请看一下这个查询:

SELECT DATE(datetime), COUNT(1) as numVisits 
FROM ".table_stats." 
WHERE type='profile_visit' 
    AND user_url = '".$_GET['ref']."' 
    AND id_user='".$_SESSION['user_code']."' 
GROUP BY DATE(DATE_SUB(datetime, INTERVAL 1 DAY))

此查询计算每个日期 type 等于'profile_visit'的次数,因此它给我两行(DATE(datetime),numVisits)。这是表table_stats的屏幕截图: Table 1 Table_Stats


好的,到目前为止,您可以了解每次用户访问该网站时,会在表格中插入一个新元素,其中包含类型 = profile_visit和日期时间字段访问的日期和时间,这就是为什么我使用 GROUP BY DATE(日期时间)来计算每天的访问总数。

复杂的部分,当类型字段等于'click'而 origin 是'imp'时,意味着用户点击特定按钮该页面,我想知道白天点击该按钮的次数(无论是ip),就像我对个人资料访问一样。

type 为“click”时,我可以制作两个查询,一个用于了解总访问量(如之前的那个)和另一个类似的 datetime 分组 origin 是'imp'。

问题是,我想在一次调用中进行此操作,以便计算NumVisits行中的日期总访问量,就像我之前所做的那样,并且新行调用NumClick,总点击次数。这就是为什么我不想在我的php服务器上进行更多计算,如果它可能会很好地在sql服务器上进行所有计算。

最后,如果你将这个查询调用到表中:

SELECT DATE( DATETIME ) , COUNT( 1 ) AS numVisits
FROM stats_ram
WHERE TYPE =  'profile_visit'
AND user_url =  'xxx'
AND id_user =  '88e91'
GROUP BY DATE( DATE_SUB( DATETIME, INTERVAL 1 
DAY ) ) 
LIMIT 0 , 30

你会得到:

DATE(datetime)  numVisits
2011-11-16      7

如何添加另一行,其中总类型=点击AND origin =由DATE(日期时间)生成的???

感谢您的帮助!!!

1 个答案:

答案 0 :(得分:3)

SELECT 
    DATE(DATETIME), 
    SUM(CASE WHEN type = 'profile_visit' THEN 1 ELSE 0 END) AS numVisits,
    SUM(CASE WHEN type = 'click' AND origin = 'imp' THEN 1 ELSE 0 END) numClicks
FROM stats_ram
WHERE user_url = 'xxx'
    AND id_user = '88e91'
GROUP BY DATE(DATE_SUB(DATETIME, INTERVAL 1 DAY)) 
LIMIT 0, 30