2012-08-08 37 views
0

我想操作一个表,但迄今为止我发现的唯一解决方案是首先创建一些表并将它们连接在一起以获得所需的结果。避免创建临时表或永久表

我试图避免创建表并将它们放在我的MySQL查询结束,这btw,我在phpmyadmin页面上运行。

以下是数据:我有一个包含user_id,columnA_unixtime,columnB_unixtime的表 - 这意味着对于每个用户,在数据库中存在两个用于两个不同事件的unix_time。

 
user_id  eventA_join  eventB_join 
1   1321652009  1321652009 
2   0    1321652257 
3   0    1321668650 
4   1321669261  0 

我想要的是一张表格,显示每天有多少用户加入了这两个事件。像这样(只是一个示例)的东西

 
day  eventA eventB 
11/18/11 3  2 
11/19/11 11  8 
11/20/11 6  3 
11/21/11 17  11 

这里是我使用至今代码:

CREATE TABLE table1(
day VARCHAR(256), 
eventA_count INT); 

INSERT INTO table1 (day, eventA_count) 
(SELECT DATE(FROM_UNIXTIME('eventA_join')) AS 'day', COUNT('user_id') AS 'eventA_count' 
FROM org_table 
WHERE 'eventA_join' > 0 
GROUP BY day); 

CREATE TABLE table2(
day VARCHAR(256), 
eventB_count INT); 

INSERT INTO table2 (day, eventB_count) 
(SELECT DATE(FROM_UNIXTIME('eventB_join')) AS 'day', COUNT('user_id') AS 'eventB_count' 
FROM org_table 
WHERE 'eventB_join' > 0 
GROUP BY day); 


SELECT t.day, t1.eventA_count, t2.eventB_count FROM 
(SELECT DISTINCT day FROM table1 
UNION 
SELECT DISTINCT day FROM table2) t 
LEFT JOIN table1 t1 
ON t.day = t1.day 
LEFT JOIN table2 t2 
ON t.day = t2.day 

DROP table2; 
DROP table1; 

至于我想我不能在phpMyAdmin使用表变量和没有我可能会使用模板表,因为当我尝试将它们连接在一起时,无法多次引用模板表(错误#10327无法重新打开临时表)。

有没有反正我避免创建表,但获得我在找什么?有什么想法吗?

编辑:两个表都从'org_table'获取数据,现在已经在代码中进行了更正。

回答

0

这对于单个查询来说很简单。您只需要UNION ALL:

select date, sum(IsEventA) as EventA, sum(isEventB) as EventB 
from ((select user_id, DATE(FROM_UNIXTIME('eventA_join') as date, 
       1 as IsEventA, 0 as IsEventB 
     from table1 
     where eventA_join > 0 
    ) union all 
     (select user_id, DATE(FROM_UNIXTIME('eventB_join') as date, 
       0 as IsEventA, 1 as IsEventB 
     from table1 
     where eventB_join > 0 
    ) 
    ) t 
group by date 
order by 1 
+0

是的。这效果很好,并向我展示了如何进行两个选择的聚合。谢谢@戈登 – AliKH 2012-08-09 18:12:10