避免创建临时或永久表

时间:2012-08-08 23:57:50

标签: mysql phpmyadmin temp-tables

我想用表操作,但到目前为止我找到的唯一解决方案是首先创建一些表并将它们连接在一起以获得所需的结果。

我正在尝试避免在我的MySQL查询结束时创建表并删除它们,我正在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”获取数据,现在在代码中进行了更正。

1 个答案:

答案 0 :(得分: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