2012-08-08 39 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